最近單位購入一臺Synology DS213J用做數據存儲。java
本人打算將一些項目的源代碼也放在上面,他自己的套件中心提供了SVN SERVER和GIT SERVER。git
設置SVN SERVER很是簡單,基本上安裝成功,設定帳號,便可使用。shell
可是GIT SERVER的架設遇到了麻煩,按照他的幫助說明,是沒法成功的,通過嘗試,發現其實就是寫幫助的人少寫了一點內容(也就是目錄權限的修改),便可解決。服務器
現將解決方法記錄以下,做爲本身的備忘錄,若是能幫助到有一樣需求和一樣麻煩的人,那麼也是很開心的事情。網絡
1.首先,進入DSM,而後在套件中心中找到GIT SERVER,下載安裝便可。架構
2.看看DSM幫助中心對GIT SERVER使用的幫助:ssh
若要容許用戶使用 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目錄以外的全部文件和目錄便可。
這樣本地就能順利推送了。
固然直接使用
git clone --bare hello hello.gitgit config --bool core.bare true
這樣直接導出裸庫,而後將hello.git 這個目錄直接上傳到服務器上也能夠。不過地址須要加上hello.git這個的目錄。