在 Windows 上架設 Git Server
這其實是大約半個月前的事情,由於工作需要,必須建立一個藏在內部網路的 git server,來統一控管散落在世界各地的龍珠程式碼。雖然我個人是希望能夠架在 FreeBSD 或是 Linux 上面,不過到最後也只要到一台 Windows 的機器來用,也只好將就著先拿來架啦。為了防止之後還需要架一台 server 的時候把安裝方法忘得一乾二淨,就趁現在還殘留著一點點記憶的時候記錄起來。
Step 1. 安裝 Cygwin
首先,這次要裝來用的是 gitolite 這套使用得滿廣泛的 git server。而在 Windows 上,gitolite 是需要執行在 Cygwin 上的。但是在安裝時要注意的是,有些會用到的 package 是 Cygwin 在預設情況下不會安裝的:
- Net > openssh
- Devel > git
- Editors > vim
其中 vim 沒裝應該也無所謂,只不過它本來就是我的愛用編輯器,所以就不加思索直接裝了。
Step 2. 架設 SSH Server
Cygwin 裝好之後,開啟 Cygwin 並執行 cyglsa-config
,以在透過 ssh 認證時,能夠藉由金鑰認證,而不需要提供使用者密碼:
$ cyglsa-config
執行完就照著指示重開機。
接著要在 Cygwin 中設定 ssh server,執行 ssh-host-config
:
$ ssh-host-config
然後就可以啟動 ssh server 了:
$ sc start sshd
接著就是建立一個專門用來當 git server 的 Windows account,於是就從控制台建立一個叫做 git 的使用者吧。需要注意的是,建立這個使用者的時候需要勾選「密碼永久有效」這個選項。
建好了之後,在 Cygwin 中執行:
$ mkpasswd -l -u git >> /etc/passwd
這時就可以透過 ssh 來連入 git 的帳號囉:
$ ssh git@localhost
在一台要當做管理員的 client 端(我是用本機的另一個帳號)用 ssh-keygen
產生一對用以做金鑰認證的 private key 與 public key(預設為 $HOME/.ssh/
目錄下的 id_rsa
與 id_rsa.pub
)。接著用 scp
或是其它任何方式把 id_rsa.pub
複製一份到 git 帳號的 home 目錄下,並改名為 [你的帳號].pub
。這組 public key 待會會被用來設定 gitolite 的管理者帳號。
Step 3. 安裝 Gitolite
終於要開始裝 gitolite 了。首先先透過 ssh 登入 git 帳號,clone 一份 gitolite 的專案:
$ git clone git://github.com/sitaramc/gitolite
然後安裝:
$ ./gitolite/install
這時可以執行 gitolite
看看是否安裝成功了。接下來就要用到剛剛的 public key 啦,執行:
$ gitolite setup -pk [username].pub
然後回到 client 端,我們要 clone 一份用以管理 git server 的 repo(註:如果你的 client 跟 server 不是同一台機器,請自行把 localhost
改成 server 的位置):
$ git clone git@localhost:gitolite-admin.git
如果有成功 clone 下來,就是成功囉。
Step 4. 管理使用者與 Repo
若是要建立一個使用者,就同樣要讓該使用者建立自己的金鑰、將他的 public key 交給你,並同樣命名為 [account].pub
。接著只要把 public key 擺在 admin 剛剛 clone 出來的 gitolite-admin
repo 下的 keydir
目錄就行了。
而若是你有多台電腦,都需要透過同一個帳號連接 git server,可以將不同電腦各自的 public key 擺在 keydir
裡的不同子目錄中。
另外,想要新增/修改/刪除 repo 的話,則需要修改 conf/gitolite.conf
這個檔案:
1 2 3 4 5 |
|
其實意義都不會很難猜:repo [reponame]
就代表一個 repo。想建立一個新的 repo,就直接照著新增上去:
1 2 |
|
RW+
為存取權限,也可以在後面限定 branch 名稱。要新增可存取的使用者,就在 =
後面以空白隔開:
1 2 3 4 5 |
|
也可以建立使用者群組:
1 2 3 4 5 6 7 |
|
在這邊做的任何修改,只要 push 上去就會立刻生效了。
後記
其實,原本還想架個 gitlab 當做一個方便操作的 web interface,不過在 Cygwin 上沒有可用的套件管理工具,實在難以設置執行環境,嘗試了幾回之後就懶得弄了。反正當前的情況是能用就好,隨便啦XD。