歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Gitolite v3安裝配置指南

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/config host server user admin port 22 identityfile ~/.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 [email protected]   4.下載gitolite   git clone git://github.com/sitaramc/gitolite   5.安裝配置   我是安裝在git用戶根目錄下的。 在根目錄下創建bin文件夾 然後執行: ~/gitolite/install -to ~/bin mv ~/.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 [email protected] 如果返回類似這樣的信息: 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 [email protected]:gitolite-admin 成功clone到本地後,可以看到這個目錄結構如下: git@linux-dev:~/gitolite-admin$ tree . ├── conf │   └── gitolite.conf └── keydir     └── git.pub   2 directories, 2 files conf是放置配置文件的目錄,gitolite.conf就是gitolite的配置文件,包含對用戶、倉儲、倉儲權限的配置。 keydir目錄用來放置所有的用戶公鑰。git.pub為安裝時setup -pk的那個用戶公鑰。       添加用戶,首先就是要把目標用戶的公鑰添加到keydir下,並重命名為該用戶的用戶名.pub。 目標用戶: $ echo ~/.ssh/id_rsa.pub ssh - 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中進行,注釋用#表示。 C C 代表創建。僅在 通配符版本庫 授權時可以使用。用於指定誰可以創建和通配符匹配的版本庫。 R, RW, 和 RW+ R 為只讀。RW 為讀寫權限。RW+ 含義為除了具有讀寫外,還可以對 rewind 的提交強制 PUSH。 RWC, RW+C 只有當授權指令中定義了正則引用(正則表達式定義的分支、裡程碑等),才可以使用該授權指令。其中 C 的含義是允許創建和正則引用匹配的引用(分支或裡程碑等)。 RWD, RW+D 只有當授權指令中定義了正則引用(正則表達式定義的分支、裡程碑等),才可以使用該授權指令。其中 D 的含義是允許刪除和正則引用匹配的引用(分支或裡程碑等)。 RWCD, RW+CD 只有當授權指令中定義了正則引用(正則表達式定義的分支、裡程碑等),才可以使用該授權指令。其中 C 的含義是允許創建和正則引用匹配的引用(分支或裡程碑等),D 的含義是允許刪除和正則引用匹配的引用(分支或裡程碑等)。 -  是一條禁用指令。只對寫操作起作用,即禁用用戶的寫操作。   接下來實際分析一個稍微復雜一些的配置文件 1   @admin = git keven admin1 admin2 2   @devteam = dev1 dev2 dev3 fish 3  4   repo gitolite-admin 5       RW+                 = git keven 6  7   repo Projects/.+ 8       C                   = @admin 9       RW                  = @all 10  11  repo testing 12      RW+                  =   @admin 13      -                    =   fish 14      RW      master       =   @dev 15      RW+     dev          =   dev1 16      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.git 12:@admin用戶組擁有讀/寫/強制更新的權限 13:fish是新手,對其屏蔽寫的權限。因為其屬@dev組,則還只剩下R 讀的權限 14:@dev用戶組對master開頭的分支擁有讀/寫權限 15:dev1這個用戶對dev開頭的分支擁有讀/寫/強制更新的權限 16:dev2這個用戶對於wip分支(嚴格匹配)具有讀/寫權限   冷門用法,需要用戶對gitolite有一定了解 有的時候用戶可能需要在服務器端創建屬於自己的倉儲,這個時候就需要像下邊這樣: 1  @admin = git keven admin1 admin2 2  repo pub/CREATOR/.+$ 3      C       =   @all 4      RW+     =   CREATOR 5      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 user1 ssh git@server perms pub/<username>/somegit WRITERS user2     9.遠程創建/刪除倉儲   創建: 關於創建倉儲,方法有三種: a. 登錄遠程服務器創建 ssh登錄服務器,切換至git用戶,進入相關目錄,創建某倉儲 mkdir somegit.git cd somegit.git git 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 test2 1 file changed, 4 insertions(+) git@linux-dev:~/gitolite-admin$ git push origin master Counting 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 [email protected]:gitolite-admin    0c409e4..b26be9a  master -> master 可以看到,gitolite會自動檢測配置文件,發現目前沒有的倉儲會自動才創建。 c.高端大氣上檔次 對於通配符版本庫,即repo Projects/.+類型的,在有創建權限的用戶shell中,本地執行: mkdir somegit cd somegit git init git commit --allow-empty git remote add origin git@server:Projects/somegit.git git push origin master gitolite會直接創建新的倉儲。 刪除: 1.在conf/gitolite.conf中刪除相關倉儲配置信息(gitolite不會自動刪除服務器上的文件,這點與add不同); 2.登錄服務器刪除需要刪除的倉儲。 重命名 同刪除操作的步驟。
Copyright © Linux教程網 All Rights Reserved