2013年2月18日月曜日

[Git]Gitolite server的架設

總之把操作步驟給記錄下來。聽說權限管理很麻煩,總之來研究看看。
感覺是因為gitolite不像svn是採用apache的權限管理方式,可以跟http綁在一起,讓web工程師在熟悉的環境下操作。這東西是綁ssh的... 自然是需要點時間瞭解。

git也是可以使用WebDAV+apache的方式走http的。請參考其他文件。
  1. 使用root權限
  2. 安裝git
  3. 安裝gitolite --- sudo apt-get install gitolite
  4. 確認home下面有gitolite這個user。沒有的話請自行建立:
    sudo adduser --system --group --shell /bin/bash --disabled-password gitolite
  5. 切換user為gitolite
  6. 以下為ssh的設定的部分。跟git還沒有太大的關聯。
  7. cd /home/gitolite/.ssh (沒有的話請自行建立)
  8. 使用ssh-keygen來產生給gitolite的admin使用的ssh key。
    >ssh-keygen -f admin
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): (直接按[Enter])
    Enter same passphrase again:(直接按[Enter])
    Your identification has been saved in admin.
    Your public key has been saved in admin.pub.
    The key fingerprint is:
    ce:1d:13:ed:2d:d4:68:fc:f2:0b:26:8c:b6:13:f5:d0 xxxx@xxxx
    
    
    之後會產生admin(私鑰)跟 admin.pub(公鑰)這兩個檔案。私鑰自行保留,公鑰需要加到gitolite裡面。下一步會提到。
  9. 使用gl-setup登錄admin.pub,讓我們可以使用ssh 登入gitolite。
    gl-setup admin.pub
  10. 切換為另一個user(在這邊我們暫時用root),進入~/.ssh目錄。
  11. 新增一個檔名為config,加入下面的資料:
    host gitserver
        user gitolite
        hostname 192.168.1.8(之前安裝過的git server的DN或是IP,在同一台機器上操作請填入127.0.0.1)
        port 22 (依照之前安裝過的git的設定變動)
    identityfile ~/.ssh/admin (之前產生的私鑰。公鑰前面有提到要登錄到gitolite上面。)
  12. 到此,gitolite server的基本設置已經完成。


下面是在gitolite裡面加入 user的動作。
記住一個觀念:gitolite的使用者管理是使用git來實作的。所以會看到都是git的操作...
  1. 把gitolite的user管理的資料clone回來。
    git clone ssh://gitserver/gitolite-admin
  2. 照步驟8的方法使用ssh-keygen來產生給user使用的ssh key。
  3. 使用git的add/commit/push的動作把user的公鑰加上去。
     > cd gitolite-admin/keydir
     > copy {公鑰的放置路徑}/chacha.pub . 
     > git add chacha.pub
     > git commit -m "新增使用者:chacha"
     > git push
  4. 完成。
  5. 備註:user端就如前面的步驟11的方法在自己的~/.ssh/config裡面加上資料就可以了。
新增repo:
編輯gitolite-admin/conf/gitolite.conf, 就照著原本裡面有的 gitolite-admin 跟test的指令用法新增各個source code project.
權限的設定:

    @developer = chacha magicalprincess
    @tester = riiya shiine 
    
    repo akazukin-repo
        R   = @tester                      //@就是group的前綴字。也可以多個group, 用空格隔開。順道一提,@all是內建的,代表所有的使用者。
        RW  = @developer           
        RW+ = admin               //+的功用是repo版本回朔。
還可以針對不同的branch規定。

        repo    akazukin-repo
                RW dev-$  =   chacha   //$代表wildcard. 「dev-」之後不管接什麼字都可以。
                R  master =  magicalprincess  //master是保留字,代表main repo.

要注意的是,branch的控制權指控制「寫入」,只要user設定了branch的控制權,該使用者就可以讀取所有branch的資料。一般來說應該是不需要設定到如此詳細,看看就好。

最後的小叮嚀:gitolite.conf改完之後別忘了commit跟push...



參考資料:
http://www.atmarkit.co.jp/fjava/rensai4/devtool26/devtool26_1.html (日文)
http://blog.countableset.ch/2012/04/29/ubuntu-12-dot-04-installing-gitolite-and-gitweb/

0 件のコメント:

コメントを投稿