2012年6月26日 星期二

Gitolite 使用教學

首先,要使用 gitolite 一定得先會使用 git。下面就不贅述。

初次設定

使用 gitolite 有以下兩個前置動作
  1. 建立 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.pubmykeymykey.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)
  2. 設定 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 文件之類的。:)

沒有留言:

張貼留言