天天看點

如何建立你自己的 Git 伺服器

盡管我是一個快樂的(同時也是付費的)GitHub使用者,但是我多次想要在我自己的伺服器上搭建私人倉庫(github會提供給付費使用者私人倉庫—-譯注)。如果你連不上公共網絡,或者你受夠了呆闆的管理,亦或是你隻是單純的想要不同與Github(以及其他類似的網站)所提供的服務,那麼搭建你自己的Git伺服器将會很有幫助。在Unix(Linux、Mac OSX、 *BSD、 Solaris、AIX)的機器上部署Git伺服器并非難事,但是仍然有許多細節需要注意。這裡是一個完整的教程。

通過以下的步驟,你将在伺服器上搭建并使用你自己的Git服務,例如myhost.example.com。其中的一些步驟,像email通知,限制使用者的權限,特定分組的接入管理,都是依據你的要求和現實狀況的可選項。還有很多指令,你需要root權限才能執行,是以别忘了用sudo,或者(最好不要)直接切換到root來執行。

  • 為有讀寫權限的使用者建立一個分組。根據你的作業系統,你可以用groupadd指令來實作,用vigr來編輯分組檔案,或者直接編輯/etc/group檔案。在最後,你會在/etc/group檔案中看到如下一行

repogroup:*:10005:marry,john,violet

其中,repogroup是準許接入這個倉庫的組的名字。10005是一個獨一無二的分組識别數字,marry,john,violet則是獲準接入這個倉庫的使用者。

  • 決定Git倉庫的路徑。它既可以放在你的home路徑下(e.g. /home/yourname/gitroot),也可以放在一個專用的路徑下(e.g. /var/gitroot).
  • 配置權限,讓Git使用者可以通路這個目錄

chmod g+rx /path-to/gitroot

chown :grouprepo /path-to/gitroot

  • 建立新的Git倉庫,叫做newrepo

cd /path-to/gitroot

git init --bare newrepo.git

  • 建立路徑認證,以允許使用者組通路,同時有針對性的設定Git

cd newrepo.git

chown -R :grouprepo .

git config core.sharedRepository group

find . -type d -print0 | xargs -0 chmod 2770

find . -type f -print0 | xargs -0 chmod g=u

  • 設定送出(commit)的email通知(commit是一條指令),這樣當有新的修改送出到倉庫的時候,開發者們将會收到一封關于修改内容一覽的電子郵件。

echo 'One-line project description' >description

git config --local hooks.mailinglist [email protected],[email protected],...

git config --local hooks.emailprefix '[DI-PR] '

git config --local hooks.showrev "git show -C %s; echo"

git config --local hooks.emailmaxlines 100

  • 00000通過設定一個稱為鈎子(hook)的東東,來建立這些email通知。

cd hooks

cp post-receive.sample post-receive

chmod +x post-receive

  • 從post-receive的腳本中移除掉最後一行注釋的#字号,最後語句應該是這樣的

. /path-to-hooks/post-receive-email

  • 在你的庫中先放入一個檔案(比如README)。為了避免其他使用者在第一次送出時遇到奇怪的錯誤資訊時感到困惑,這是有必要的。

cd to-your-personal-working-directory

git clone myhost.example.com:/path-to/gitroot/newrepo.git

echo "Short project description" >README.txt

git add README.txt

git commit -a -m "Add README file"

git push origin master # 第一次僅僅需要T"origin master" 這個參數

  • 為倉庫的其他使用者建立賬戶。依據你系統的不同,你可以通過useradd 或者adduser來實作。
  • 設定使用者可以通過公/私鑰配對來通路。這包括以下幾步:

1)已經有公鑰的使用者,隻需要把公鑰發給你就好。

2)沒有公鑰的使用者,必須用ssh-keygen指令來生成一個,然後把.ssh/id_rsa.pub發給你就可以了。

3)之後你必須在他們對應的賬戶下面建立這種公/私鑰配對。複制他的公鑰,然後順序執行下面的指令。

sudo su - username

mkdir -p .ssh

cat >>.ssh/authorized_keys <<\EOF

paste-key-as-one-line

EOF

exit

  • 改變使用者的賬戶讓他們使用受限的shell。如果你想讓你添加進來的使用者僅僅使用Git,而不是Unix的所有東西,那麼就設定他們的賬戶,讓他們隻能使用Git。Git提供了這種專為這種需求設計的受限shell。它通常被安裝在 /usr/libexec/git-core/git-shell or /usr/local/libexec/git-core/git-shell。是以,對所有你想限制權限的使用者,你可以執行以下指令。

sudo chsh -s /usr/libexec/git-core/git-shell username

告訴你的使用者,用下面的語句來克隆倉庫到本地。

到了這裡,恭喜你,你成功了!