gitosis搭建

一、安裝python環境python

二、git

git clone git://eagain.net/gitosis.git//該倉庫有問題

換新倉庫:git clone https://github.com/res0nat0r/gitosis.gitgithub

cd gitosis
sudo python setup.py install

三、修改/home/git/.ssh/authorized_keys文件名,保證不存在該文件服務器

四、ssh

sudo -H -u git gitosis-init < /tmp/id_dsa.pub

公鑰爲管理公鑰用有者iphone

五、post

sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update
ssh git@gitserver
PTY allocation request failed on channel 0
fatal: unrecognized command 'gitosis-serve schacon@quaternion'
  Connection to gitserver closed.

說明 Gitosis 認出了該用戶的身份,但因爲沒有運行任何 Git 命令,因此它切斷了鏈接。那麼,如今運行一個實際的 Git 命令 — 克隆 Gitosis 的控制倉庫:.net

六、調試

# 在你本地計算機上
$ git clone git@gitserver:gitosis-admin.git

這會獲得一個名爲 gitosis-admin 的工做目錄,主要由兩部分組成:日誌

$ cd gitosis-admin
$ find .
./gitosis.conf
./keydir
./keydir/scott.pub

gitosis.conf 文件是用來設置用戶、倉庫和權限的控制文件。keydir 目錄則是保存全部具備訪問權限用戶公鑰的地方— 每人一個。在 keydir 裏的文件名(好比上面的 scott.pub)應該跟你的不同 — Gitosis 會自動從使用 gitosis-init 腳本導入的公鑰尾部的描述中獲取該名字。

看一下 gitosis.conf 文件的內容,它應該只包含與剛剛克隆的 gitosis-admin 相關的信息:

$ cat gitosis.conf
[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = scott

它顯示用戶 scott — 初始化 Gitosis 公鑰的擁有者 — 是惟一能管理 gitosis-admin 項目的人。

如今咱們來添加一個新項目。爲此咱們要創建一個名爲 mobile 的新段落,在其中羅列手機開發團隊的開發者,以及他們擁有寫權限的項目。因爲 ‘scott’ 是系統中的惟一用戶,咱們把他設爲惟一用戶,並容許他讀寫名爲 iphone_project 的新項目:

[group mobile]
writable = iphone_project
members = scott

修改完以後,提交 gitosis-admin 裏的改動,並推送到服務器使其生效:

$ git commit -am 'add iphone_project and mobile group'
[master]: created 8962da8: "changed name"
 1 files changed, 4 insertions(+), 0 deletions(-)
$ git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 272 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@gitserver:/opt/git/gitosis-admin.git
   fb27aec..8962da8  master -> master

在新工程 iphone_project 裏首次推送數據到服務器前,得先設定該服務器地址爲遠程倉庫。但你不用事先到服務器上手工建立該項目的裸倉庫— Gitosis 會在第一次遇到推送時自動建立:

$ git remote add origin git@gitserver:iphone_project.git
$ git push origin master
Initialized empty Git repository in /opt/git/iphone_project.git/
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@gitserver:iphone_project.git
 * [new branch]      master -> master

請注意,這裏不用指明完整路徑(實際上,若是加上反而沒用),只須要一個冒號加項目名字便可 — Gitosis 會自動幫你映射到實際位置。

要和朋友們在一個項目上協同工做,就得從新添加他們的公鑰。不過此次不用在服務器上一個一個手工添加到 ~/.ssh/authorized_keys 文件末端,而只需管理 keydir 目錄中的公鑰文件。文件的命名將決定在 gitosis.conf 中對用戶的標識。如今咱們爲 John,Josie 和 Jessica 添加公鑰:

$ cp /tmp/id_rsa.john.pub keydir/john.pub
$ cp /tmp/id_rsa.josie.pub keydir/josie.pub
$ cp /tmp/id_rsa.jessica.pub keydir/jessica.pub

而後把他們都加進 ‘mobile’ 團隊,讓他們對 iphone_project 具備讀寫權限:

[group mobile]
writable = iphone_project
members = scott john josie jessica

若是你提交併推送這個修改,四個用戶將同時具備該項目的讀寫權限。

Gitosis 也具備簡單的訪問控制功能。若是想讓 John 只有讀權限,能夠這樣作:

[group mobile]
writable = iphone_project
members = scott josie jessica

[group mobile_ro]
readonly = iphone_project
members = john

如今 John 能夠克隆和獲取更新,但 Gitosis 不會容許他向項目推送任何內容。像這樣的組能夠隨意建立,多少不限,每一個均可以包含若干不一樣的用戶和項目。甚至還能夠指定某個組爲成員之一(在組名前加上 @ 前綴),自動繼承該組的成員:

[group mobile_committers]
members = scott josie jessica

[group mobile]
writable  = iphone_project
members   = @mobile_committers

[group mobile_2]
writable  = another_iphone_project
members   = @mobile_committers john

若是遇到意外問題,試試看把 loglevel=DEBUG 加到 [gitosis] 的段落(譯註:把日誌設置爲調試級別,記錄更詳細的運行信息。)。若是一不當心搞錯了配置,失去了推送權限,也能夠手工修改服務器上的 /home/git/.gitosis.conf 文件 — Gitosis 實際是從該文件讀取信息的。它在獲得推送數據時,會把新的 gitosis.conf 存到該路徑上。因此若是你手工編輯該文件的話,它會一直保持到下次向 gitosis-admin 推送新版本的配置內容爲止。

相關文章
相關標籤/搜索