Git 最著名的 repository 集散地非 Github 莫屬了,所有配套也都相當完整,但我寫的小程式多半是自用,所以從 Subversion 的時代開始,server 也只是拿來同步不同電腦之間的 code,那些 version control 的功能幾乎都沒用到,不過既然 DS213+ 有提供 SSH 功能,就把 git repos 也從弟弟那裡搬回來了。
安裝 git
DSM 內建並沒有 git 程式,可以透過 ipkg 安裝(目前版本為 1.8.2.3-2,會安裝到 /opt/bin
裡)
$ sudo ipkg install git
不過我是安裝 SynoCommunity 所提供的 package(目前版本為 1.8.3-3,會安裝到 /usr/local/git
),主要是因為版本較新,且該網站宣稱
The packages offered by SynoCommunity have been tested, and do not interfere with official Synology packages.
姑且就覺得它比較 ok 吧!可惜他的安裝路徑是在 /usr/local/git
,與一般 package 會安裝到 /opt/bin
或是 /usr/local/bin
這樣的習慣不同,得額外處理 PATH 的問題。
建立 git 使用者
用 DSM 裡的「控制台」 -> 「使用者帳號」建立一個 git 專用的 user.
為了讓網址好看一些,我把家目錄的名字取為 repos
, 並建立一個 symbolic link 在 /
修改 /etc/passwd
, 將 git 使用者的 shell 改成 /bin/ash
(註:請見文末「尚未解決」段落)
將原先已經存在的 repository 全部搬進去 home directory.
設定 ssh 環境變數
因為 non-interactive 介面的環境變數 PATH
會重設,透過 ssh 來存取 git repository 會找不到 git 程式,可以透過修改每個 project 的 .gitconfig
來設定完整路徑,但比較乾脆的解決方式還是透過 .ssh/environment
來設定,修改 /etc/ssh/sshd_config
,打開 PermitUserEnvironment yes
建立 ~/.ssh/environment
並加入
PATH=/opt/bin:/opt/sbin:/usr/local/git/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
設定新的 origin url
將原本已經 clone 出去的 repo 重新指定 origin url
$ git remote set-url origin ssh://git@git_server_hostname/repos/some_repo.git
尚未解決
一般會建議不要讓 git 這個使用者登入 shell,所以 git 本身提供了一個 git-shell
有限制功能的 shell,但在這台 Synology 的機器上一直會遇到 Permission denied 的問題,暫時解決不了。