首先,要使用 gitolite 一定得先會使用 git。下面就不贅述。
初次設定
使用 gitolite 有以下兩個前置動作
-
建立 ssh keypair
-
使用 Linux 或 Windows 上的 Git Bash
$ ssh-keygen -f mykey Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in mykey. Your public key has been saved in mykey.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx USER@HOST
這邊要注意幾個地方,
-f
後面的參數表示檔名,可自行設定,此例中為 mykey。產生後會有兩個檔案,分別是mykey.pub
跟mykey
,mykey.pub
是 public key (公鑰),可以提供給你的 gitolite server 管理員,而mykey
為 private key (私鑰),相當於密碼,不可以洩漏給任何人。再來,passphrase 是用來保護 key 的密碼,也要牢記。在認證時,同時擁有 private key 與 passphrase 的人才能通過認證,這才是安全的手法。最後,當 key 產生之後,會印出 key 的 fingerprint (指紋),是用來核對 public key 正確性用的。 -
使用 PuTTY (PuTTYGen) 下載
- 開啟 PuTTYGen
- 點選「Generate」並根據指示隨意移動滑鼠
- 修改上方「Key comment」並輸入 passphrase (passphrase 的說明可參考上一點)
- 將上方文字區中的 public key (ssh-rsa 開頭的那串內容) 與其下方的 fingerprint 複製並提供給 gitolite 管理員
- 點選下方「Save private key」將私鑰儲存如果對於產生過程有什麼疑慮,都可以刪掉剛產生的 keypair,重新產生,沒有不良影響。Keypair 產生後,就可以將 public key 與 fingerprint 提供給管理員新增帳號。為了確保安全,最好跟管理員用另外的管道確認 fingerprint 正確。(例如用網路傳輸 public key,用電話確認 fingerprint)
-
-
設定 ssh host alias (for Linux user, optional)
如果想要簡化後續操作 ssh 時輸入的資訊,可以事先設定好。這邊須填入由 gitolite 管理者提供的user
,hostname
,port
等資訊:$ vim ~/.ssh/config host gitserver user git hostname localhost port 22 identityfile ~/.ssh/mykey
最後面的 identity file 就是 private key,如果不想設定也可以直接把 private key 更名為
id_rsa
放在~/.ssh
下即可。
一般使用
申請 repository
申請 repository 只要將想使用的名字告知 gitolite 管理員即可。如果有特殊需求,可以建立規則,自行新增,但使用上須更加小心。
指定群組
如果有多人為同一個 team 的成員,可設定為群組,方便管理。
權限控制 (進階)
Gitolite 可以對 repository 中的每個 branch 或 tag 進行詳細的控制,例如 leader 可以讀寫所有 branch,而成員只能讀取 master,以及讀寫自己所屬的 branch 等等。若需要進階的權限控制可以詢問你的 gitolite 管理員。
範例
@team = alice bob
repo @all ### 所有 repo
R = boss ### 老闆都可以看
repo project
R master$ = crboy @team
RW+ master$ = crboy
RW dev$ = crboy @team
存取 repository
由 gitolite 建立的 repo link 比較單純,不須加上路徑,如下:
<git_user>@<host_address>:<repo_name>
以上面的例子而言,即為:
git@localhost:project (通常的狀況下不會是 localhost,這部份就要自己變通了)
如果有照上面設定 ssh config 的話,可以寫:
gitserver:project
在這裡我們將 host alias 設定為 gitserver
(按照前面的 ssh config 設定),冒號後面直接接上 repo 名稱即可。
將現有 repo 放到 gitolite 上
其實只是把 clone 空 repo 的動作省略,改為直接設定遠端 repo 位置而已
$ git remote add origin ssh://git@localhost:project
$ git push origin master
結語
其實基本上的 gitolite 使用並沒有什麼技巧,只要把 ssh key 準備好並設定一下,能夠順利 clone 回來的話就沒問題了。或也可以把現有 repo push 到 gitolite server 上面的空 repo 去,方式其實都大同小異。如果要學習 gitolite 的管理才比較需要 K 文件之類的。:)
Last modified on 2012-06-26