git Server

  • 以ubuntu 16.10版的Azure server為例
  • 先透過ssh登入ubuntu server
  • 然後sudo -s 切換到超級使用者模式
  • 安裝需要的套件

    apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
    
  • 安裝git server

    apt-get install git-core
    
  • 新增要存取git server的使用者

    // 建立user
    adduser [username]
    // 把user加入到root群組
    usermod -g admin [username]
    
  • 把使用者加入群組,方便做權限控管

// 查詢Group
cat /etc/group
// 新增到group
groupadd [groupname]
// -a -G 將某位user加入到新群組,但不將使用者從原本群組移除
usermod -a -G [groupname] [username]
// 更改將Group綁定到某個路徑上
chgrp -R [groupname] [path] //ex chgrp -R git /var/git
// 更改path底下所有檔案的rwx權限for group
chmod g+rwx -R [path]
// 讓其他使用者無法存取此repository
chmod o-rwx -R [path]
  • 架設gitolite的流程

    • 先安裝好git server
    • 選擇一台client端電腦作為晚點要設定gitolite的主帳號
      • 利用ssh-keygen產生一對公鑰私鑰
      • 透過scp將公鑰上傳到gitolite的server上(在此假設公鑰名稱叫做id_rsa.pub)
    • 在ubuntu內開啟一個名叫git的userid(這會是以後所有人要來存取此台gitolite的唯一帳號),再使用su - git的方式切換到git
    • 然後在git的家目錄底下抓取gitiolite的source code
    git clone git://github.com/sitaramc/gitolite
    
    • 安裝gitolite
    cd $HOME
    mkdir -p bin
    gitolite/install -to $HOME/bin
    
    • 設定gitolite,並選擇gitolite帳號的公鑰
    cd $HOME
    $HOME/bin/gitolite setup - /tmp/id_rsa.pub
    
    • 用client端(要有id_rsa.pub這私鑰的別台電腦)測試gitolite是否安裝成功
    git ls-remote git@server:gitolite-admin
    
    //如果有回覆類似下面的東西,代表安裝成功
    9dd8aab60bac5e54ccf887a87b4f3d35c96b05e4    HEAD
    9dd8aab60bac5e54ccf887a87b4f3d35c96b05e4    refs/heads/master
    
  • 加入使用者的方式

    • 把使用者的公鑰放入client端的gitolite-admin/keydir底下
    • 假設公鑰名稱叫做user1.pub,這個user在repo裡面的名稱就會叫做user1
    • 之後add & commit & push
  • 替使用者開新專案的流程

    • 先編輯gitolite-admin/conf/gitolite.conf來開啟專案,並同時給予使用者權限
    repo   projectName
        RW     =    user1
        -R     =    user2
    
    • 然後commit & push
    • 然後用對此專案有寫權限的user先clone
    git clone git@server ip or domain name:projectName.git
    
    • 之後先把所有專案檔案拉入此專案資料夾底下,再add & commit & push即可
  • 使用者端的ssh alias設定

    • 編輯 ~/.ssh/config檔案
    host    gito
         user git  // 這裡要填gitolite對外使用的存取帳號,在我們這例子是git
         hostname  server ip or domain
         port 22
         identityfile ~/.ssh/admin
    
    • 之後用 git clone gito:gitolite-admin,就可以快速下載gitolite-admin這個專案了
  • 使用者的權限設定

    • 想要多瞭解可以看這兩篇
    • 使用@來指定群組
      • @rd1 = yura ken
      • @rd2 = hani tzuyu
      • @rdteam = @rd1 @rd2 mina
    • <權限> [<引用>]* = [<user>]+
    • C, R, RW, RW+, RWC, RW+C, RWD, RW+D, RWCD, RW+CD, -
      • R 讀取
      • W 寫入或建立新的 refs (branches, tags)
        • 刪除或改變 refs (允許push -f)
        • 拒絕存取 (可用以明確拒絕使用者存取此 repo,須寫在 R 權限之前)
      • C 和 D是比較特別的權限
      • C(獨立)僅用於使用正規表示法的repo,表示可建立符合該正規表示法的repo名稱
      • C(組合)僅用於使用正規表示法的refs,表示可建立符合該正規表示法的refs名稱
      • D僅用於使用正規表示法的refs,表示可刪除符合該正規表示法的refs名稱

results matching ""

    No results matching ""