最近單位購入一台Synology DS213J用作數據存儲。
本人打算將一些項目的源代碼也放在上面,他本身的套件中心提供了SVN SERVER和GIT SERVER。
設置SVN SERVER非常簡單,基本上安裝成功,設定賬號,即可使用。
但是GIT SERVER的架設遇到了麻煩,按照他的幫助說明,是無法成功的,經過嘗試,發現其實就是寫幫助的人少寫了一點內容(也就是目錄權限的修改),即可解決。
現將解決方法記錄如下,作為自己的備忘錄,如果能幫助到有同樣需求和同樣麻煩的人,那么也是很開心的事情。
1.首先,進入DSM,然后在套件中心中找到GIT SERVER,下載安裝即可。
2.看看DSM幫助中心對GIT SERVER使用的幫助:
若要允許用戶使用 Git: 請使用擁有管理權限的帳戶登錄 DSM。進入控制面板 > 終端機並啟用 SSH 服務。 請啟動 Git 套件,並選擇用戶以向其提供從資料庫簽入與簽出文件的能力。 注: 通過稱為 git-shell 的殼工具,Git 用戶將被限制僅可進行 Git 相關活動。此登錄殼將應用於 Git 用戶可進行確保這些帳戶僅用於 Git 操作。因此,Git 用戶只能使用 SSH 連接來推拉 Git 存儲庫,而沒有 DSM 完全的訪問權限。 若要創建 Git 存儲庫: 請通過 SSH 服務以 root 或 admin 身份登錄 Synology 服務器。 將目錄更改為 /volumeX(X 為卷編號)以創建文件夾。例如,“git_repos”。該文件夾將擁有與 Linux 相同的權限。 請在該文件夾中運行 git init 來創建空存儲庫。 創建存儲庫后,Git 客戶端用戶可輸入以下命令來訪問該存儲庫: git clone ssh://[Git 用戶]@[您的 Synology 服務器 IP 地址或主機名]/[Git 存儲庫路徑]
這里鄙視一下寫幫助的這個人,我嚴重懷疑群暉的工作人員是沒有真的在他們機器上測試過GIT SERVER的。因為按照他幫助說的方法,你是不可能成功的。
遇到這個問題的時候我搜遍了網絡,也沒有第二個人有這個問題的描述,只是查找到不少從頭安裝GIT SERVER的文章,而且其中還充斥着很多無用的步驟。
3.正確的方法如下:
安裝成功之后,在DSM中創建一個GIT用戶,比如我創建的用戶為jackwong,然后進入DSM左上的功能菜單,打開GIT SERVER窗口,將允許訪問GIT庫的用戶打上勾。比如我就將jackwong這個用戶打上了勾。
然后進入控制面板 > 終端機並啟用 SSH 服務。
到這一步,DSM的設置任務就完成了。
接着通過SSH連接到你的這個DS213J上。登陸的時候當然采用root登陸,密碼就是admin的密碼。
登陸進去之后,就是Linux命令行操作了。
首先進入你的磁盤卷,一般名字是volumeX,X表示你創建的磁盤空間數量,一般這個機器就兩個硬盤,一般就是volume1了
cd /volume1
接着創建一個git庫目錄
mkdir git_repos
然后再里面創建一個測試項目
cd git_repos
mkdir gittest
然后進入這個測試項目目錄
cd gittest
進行GIT初始化
git init --bare
由於是root用戶執行的操作,所以有一個最最重要的步驟,就是將這個寶庫的整個目錄的主人要修改為你的git用戶
chown -R jackwong:users git_repos
如果你還想讓其他用戶也一起共享的話,
還需要將其他用戶的權限設置為可寫
chmod -R 775 git_repos
當然,這里的git_repos是整個庫目錄,我是為了省事情,如果不同項目需要區別對待,那就對里面的項目目錄進行設置就可以了。
總的原則就是某個用戶要想能推送文件到服務器,必須打開這個用戶對整個項目目錄,包括子目錄的寫權限,否則就會失敗。
到這里,服務器就設置完畢了。
在客戶端進入git 命令行,測試一下是否可以下載和上傳。
git clone ssh://jackwong@192.168.0.1/volume1/git_repos/gittest
然后再本地添加一個文件並提交到本地版本庫中
echo "t1.txt" >t1.txt
git add t1.txt
git commit -m "add t1.txt"
最后測試一下推送到GIT SERVER上
git push origin master
顯示成功!
如果要添加其他用戶,只需要在DSM中創建賬號,並且在GIT SERVER界面中允許訪問的勾打上。並保證這個用戶在git_repos下的對應項目文件夾中具有寫權限就可以了。
PS :GIT的使用和SVN這類中心式的架構有很大不同。要把本地項目創建到GIT SERVER上,需要費點周折。
簡單的說可以按照如下步驟:
1.先在本地創建項目,有個項目目錄
2.然后在本地的這個項目目錄中執行git --bare init進行初始化。
3.然后將需要提交的文件提交到本地
4.然后將項目目錄COPY到服務器上,只COPY .git 目錄就行,其他工作目錄不用COPY的。
5.在本地就可以推送到遠程服務器上了。
還有一種方法:
如果本地初始化的時候使用的是git init,那么推送就會出現問題。
解決方法是將本地的目錄全部COPY到服務器上。
然后再服務器對應目錄下面執行:
git config --bool core.bare true
接着刪除掉除.git目錄之外的所有文件和目錄即可。
這樣本地就能順利推送了。
當然直接使用
git clone --bare hello hello.git
這樣直接導出裸庫,然后將hello.git 這個目錄直接上傳到服務器上也可以。不過地址需要加上hello.git這個的目錄。