這裡簡單說明在 Linux 中如何架設 Git 伺服器,將自己電腦中的 Git 專案放進伺服器中,讓整個團隊進行協同開發。
Git 伺服器所使用的傳輸協定分為好幾種,這裡介紹如何設定 SSH 加密傳輸的 Git 伺服器。
使用 git clone
加上 --bare
參數,將目前自己電腦中的 repository 匯出一份 bare repository(不含 working directory 的 repository,而習慣上 bare repository 的目錄名稱都會以 .git
結尾):
git clone --bare my_project my_project.git
這樣在 my_project.git
中應該就會有一份 git 的目錄資料。
上面這個建立 bare repository 的動作,大致上就是將 my_project/.git
目錄複製出來而已:
cp -Rf my_project/.git my_project.git
其中有些小差異,不過在這裡沒有太大的影響。
接著將這個 bare repository 放進伺服器中:
scp -r my_project.git user@git.example.com:/opt/git/
這樣會將剛剛建立的 bare repository 放進 git.example.com
這台伺服器的 /opt/git/
目錄中,當然你要先確定你有這個目錄的寫入權限。
在這個時候,只要可以讀取 /opt/git/
目錄的使用者,都可以 clone 這個 repository:
git clone user@git.example.com:/opt/git/my_project.git
如果要讓開發團隊中的每個人都可以將自己開發的內容 push 上來,那就要再執行 git init
並加上 --shared
參數:
ssh user@git.example.com cd /opt/git/my_project.git git init --bare --shared
這樣基本的 Git 伺服器就完成了,現在只要在伺服器上有帳號的人,都可以使用這個 repository 進行開發了。
上面設定好的 Git 伺服器適用於開發團隊中每位成員都有 Linux 帳號的狀況,如果團隊的成員很多,不想要爲每一個人都開一個帳號,那比較簡單的做法就是大家都使用同一個 Linux 帳號。
首先在伺服器中新增一個 Git 專用的帳號:
sudo adduser git
將 /opt/git/DesktopApp.git
整個目錄的擁有者設定為 git
:
sudo chown -R git:git /opt/git/DesktopApp.git
變換為 git 帳號權限,在 home 目錄中建立一個 .ssh
目錄:
sudo su git cd mkdir .ssh
建立 SSH public key:
ssh-keygen
將產生的 public key 複製到 authorized_keys,讓 SSH 登入時可以使用這支 key 做認證:
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
編輯 /etc/passwd
,更改 git
帳號的 shell 為 /usr/bin/git-shell
:
git:x:1002:1003:,,,:/home/git:/bin/bash
改為
git:x:1002:1003:,,,:/home/git:/usr/bin/git-shell
這樣這定就完成了,最後就把 /home/git/.ssh/id_rsa
交給團隊中的開發者,藉由 public key 認證的方式登入。
這裡產生一組 key 讓所有人共用是比較偷懶的做法,一般來說應該是讓每個人都各自產生自己的 public key,然後全部放進 git
的 ~/.ssh/authorized_keys
中:
cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
通常這樣會比較好,不會讓開發者需要管理太多的 private key。
如果是使用 Eclipse 的人,可以使用 Eclipse 直接產生 public key,然後再把這個 key 加進 authorized_keys
中。
參考資料:git-scm.com