Gitolite v3安裝配置指南
gitolite在近期做了很多代碼改動,升級到了v3版本,而我使用的是v3.5.2。在《Git權威指南》中所提及的是v2版本,有很多東西已經不適合當前的v3版本,比如安裝和使用者自有倉儲的配置,一些公用的部分有一些從書中摘抄而來。 1.ssh協議SSH 協議用於為 Git 提供遠程讀寫操作,是遠程寫操作的標準服務,在智能HTTP協議出現之前,甚至是寫操作的唯一標準服務。ssh可用於遠程登入,服務端需要安裝openssh-server,用戶端需要安裝openssh-client。之所以介紹ssh協議是因為gitolite以及gitosis都是基於ssh公開金鑰認證的。 $ ssh-keygen該命令會在使用者目錄下.ssh目錄下產生兩個檔案 id_rsa 私密金鑰檔案。是基於 RSA 演算法建立。該私密金鑰檔案要妥善保管,不要泄漏。 id_rsa.pub 公開金鑰檔案。和 id_rsa 檔案是一對兒,該檔案作為公開金鑰檔案,可以公開。$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@server將本地公開金鑰提供給遠程伺服器,以達到無需口令直接登入的效果。實際上是將id_rsa.pub添加到authorized_keys中,直接操作authorized_keys效果一樣。 遠程登入方法:ssh user@server 使用主機別名方法登入:編輯~/.ssh/confighost serveruser adminport 22identityfile ~/.ssh/jiangxing #指定登入時使用的本地公開金鑰 本地可以產生不同別名的公開金鑰,方法是:ssh-keygen -f ~/.ssh/<filename> 2.建立git使用者 $ sudo adduser --system --shell /bin/bash --group git有的系統,只允許特定的使用者組(如 ssh 使用者組)的使用者才可以通過 SSH 協議登入,這就需要將建立的 git 使用者添加到 ssh 使用者組中。$ sudo adduser git ssh設定密碼$ passwd git 3.產生ssh key 切換到git使用者:$ su git$ ssh-keygen$ ssh-copy-id git@127.0.0.1 4.下載gitolite git clone git://github.com/sitaramc/gitolite 5.安裝配置 我是安裝在git使用者根目錄下的。在根目錄下建立bin檔案夾然後執行:~/gitolite/install -to ~/binmv ~/.ssh/authorized_keys ~/git.pub~/bin/gitolite setup -pk ~/git.pub成功後出現:初始化空的 Git 版本庫於 /home/git/repositories/gitolite-admin.git/初始化空的 Git 版本庫於 /home/git/repositories/testing.git/安裝成功。所謂更新就是重新安裝。 6.測試 還是在git使用者下ssh git@127.0.0.1如果返回類似這樣的資訊:hello git, this is git@linux-dev running gitolite3 v3.5.2-4-g62fb317 on git1.8.1.2 R W gitolite-admin R W testing代表gitolite工作正常 7.添加使用者 在第5步可以看到,成功安裝後gitolite會自動產生兩個倉儲,一個是testing.git用來測試,另一個gitolite-admin就是用來管理gitolite的配置倉儲。 將gitolite-admin.git clone到本地,注意:還是在git使用者下,因為當前只有git使用者對其有讀寫權限。$ git clone git@127.0.0.1:gitolite-admin成功clone到本地後,可以看到這個目錄結構如下:git@linux-dev:~/gitolite-admin$ tree.├── conf│ └── gitolite.conf└── keydir └── git.pub 2 directories, 2 filesconf是放置設定檔的目錄,gitolite.conf就是gitolite的設定檔,包含對使用者、倉儲、倉儲許可權的配置。keydir目錄用來放置所有的使用者公開金鑰。git.pub為安裝時setup -pk的那個使用者公開金鑰。 添加使用者,首先就是要把目標使用者的公開金鑰添加到keydir下,並重新命名為該使用者的使用者名稱.pub。目標使用者:$ echo ~/.ssh/id_rsa.pubssh - rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVPPqRucnXGPOP2I6NbJ4wgg9vwb91mo9Q3AZJgbaK45Qz5UK71qM9JxL71jU3F2ogk1NHD0MCIlmmI50/1f1BHhd+ xxxxxxxxxxxx+ DU30KzsylQVN3sAz4gOpvz+ zl7ftBPxtVYwSluJ+ om4V4mbXT9+ uczRbCe1ejhYdg7vKYQV7K1VJ26hON8ztCRarL52Irq/6a5It1Q78xv6Xf5F4mQOzUQsQp2EthtoA9XPiIybMjzNThDfbbKeW7kRZxBgi0RWLRYUSmc/ UBNkQuub8l+ II4S0FNhnUlNkmC/ mUHKTqcjeS1fyJAkRcYC+ fVTd4zqBNj1JupZfafpaeB keven@linux- dev將顯示內容給git使用者,或在git使用者下粘貼來也可。目標使用者名稱為keven,則最終應該以git使用者身份將其儲存在keydir目錄下,命名為keven.pub然後添加使用者相應許可權。只要是在keydir下存在的使用者,都屬於@all使用者組,其他使用者組可通過在gitolite.conf自行定義。如:@admin = git keven repo gitolite - admin RW + = @admin repo testing RW + = git RW = @all@admin使用者組有兩個使用者git keven,分別對應keydir下的git.pub, keven.pub。gitolite-admin倉儲的讀/寫/強制更新許可權 只有@admin使用者組擁有;testing倉儲的讀/寫/強制更新全系愛你 只有git使用者擁有,其他所有在keydir下存在公開金鑰的使用者享有讀/寫入權限。 8.許可權配置 許可權配置在gitolite.conf中進行,注釋用#表示。CC 代表建立。僅在 萬用字元版本庫 授權時可以使用。用於指定誰可以建立和萬用字元匹配的版本庫。R, RW, 和 RW+R 為唯讀。RW 為讀寫權限。RW+ 含義為除了具有讀寫外,還可以對 rewind 的提交強制 PUSH。RWC, RW+C只有當授權指令中定義了正則引用(Regex定義的分支、裡程碑等),才可以使用該授權指令。其中 C 的含義是允許建立和正則引用匹配的引用(分支或裡程碑等)。RWD, RW+D只有當授權指令中定義了正則引用(Regex定義的分支、裡程碑等),才可以使用該授權指令。其中 D 的含義是允許刪除和正則引用匹配的引用(分支或裡程碑等)。RWCD, RW+CD只有當授權指令中定義了正則引用(Regex定義的分支、裡程碑等),才可以使用該授權指令。其中 C 的含義是允許建立和正則引用匹配的引用(分支或裡程碑等),D 的含義是允許刪除和正則引用匹配的引用(分支或裡程碑等)。- 是一條禁用指令。只對寫操作起作用,即禁用使用者的寫操作。 接下來實際分析一個稍微複雜一些的設定檔1 @admin = git keven admin1 admin22 @devteam = dev1 dev2 dev3 fish3 4 repo gitolite-admin5 RW+ = git keven6 7 repo Projects/.+8 C = @admin9 RW = @all10 11 repo testing12 RW+ = @admin13 - = fish14 RW master = @dev15 RW+ dev = dev116 RW wip$ = dev2逐行解釋:1: @admin使用者組有git keven admin1 admin2四個使用者2:@devteam使用者組有dev1 dev2 dev3 fish四個使用者4:對於gitolite-admin倉儲5:git keven兩個使用者擁有讀/寫/強制更新的許可權7:對於Projects下所有的git倉儲(/.+代表遞迴所有)8:@admin使用者組擁有建立倉儲的許可權9:所有人均可讀/寫11:對於testing.git12:@admin使用者組擁有讀/寫/強制更新的許可權13:fish是新手,對其屏蔽寫的許可權。因為其屬@dev組,則還只剩下R 讀的許可權14:@dev使用者組對master開頭的分支擁有讀/寫入權限15:dev1這個使用者對dev開頭的分支擁有讀/寫/強制更新的許可權16:dev2這個使用者對於wip分支(嚴格匹配)具有讀/寫入權限 冷門用法,需要使用者對gitolite有一定瞭解有的時候使用者可能需要在伺服器端建立屬於自己的倉儲,這個時候就需要像下邊這樣:1 @admin = git keven admin1 admin22 repo pub/CREATOR/.+$3 C = @all4 RW+ = CREATOR5 R = @admin每個使用者都可以在users/<自己的使用者名稱>目錄下建立屬於自己的倉儲,而這個倉儲,自己擁有完整的許可權,管理員只有讀許可權。註:RW+ = CREATOR丟失會導致只能init空倉儲而不能向上推送內容。用法:在使用者shell中,進入要提交至伺服器的倉儲,執行:git push git@server:pub/<username>/somegit.git <branch> 使用者可以通過ssh git@server perms對倉儲許可權進行設定,允許其他使用者擁有寫入權限等。添加讀許可權是READERS,讀寫權限是WRITERS操作:ssh git@server perms pub/<username>/somegit READERS user1ssh git@server perms pub/<username>/somegit WRITERS user2 9.遠程建立/刪除倉儲 建立:關於建立倉儲,方法有三種:a. 登入遠程伺服器建立ssh登入伺服器,切換至git使用者,進入相關目錄,建立某倉儲mkdir somegit.gitcd somegit.gitgit init --bare建立完畢b.修改gitolite.conf建立倉儲開啟gitolite-admin/conf/gitolite.conf,添加:repo testing2 RW+ = @all儲存修改,提交。git@linux-dev:~/gitolite-admin$ git commit-m'add test2'[master b26be9a] add test21 file changed, 4 insertions(+)git@linux-dev:~/gitolite-admin$ git push origin masterCounting objects: 7, done.Delta compression using up to2 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (4/4),350 bytes, done.Total 4 (delta 1), reused0 (delta0)remote: 初始化空的 Git 版本庫於 /home/git/repositories/testing2.git/To git@127.0.0.1:gitolite-admin 0c409e4..b26be9a master -> master可以看到,gitolite會自動檢測設定檔,發現目前沒有的倉儲會自動才建立。c.高端大氣上檔次對於萬用字元版本庫,即repo Projects/.+類型的,在有建立許可權的使用者shell中,本地執行:mkdir somegitcd somegitgit initgit commit --allow-emptygit remote add origin git@server:Projects/somegit.gitgit push origin mastergitolite會直接建立新的倉儲。刪除:1.在conf/gitolite.conf中刪除相關倉儲配置資訊(gitolite不會自動刪除伺服器上的檔案,這點與add不同);2.登入伺服器刪除需要刪除的倉儲。重新命名同刪除操作的步驟。