TortoiseGit + msysgit + CopSSH + WindowsXP as server
1.需要軟體
msysgit (伺服器和用戶端)
CopSSH (伺服器)
TortoiseGit (用戶端)
Junction Link Magic (伺服器,可選)
版本就不寫了,找最新的就是
2.伺服器上
安裝msysgit
選擇plink, 不是OpenSSH
選擇將Git加入path (第二個選項)
安裝CopSSH
使用預設設定安裝
CopSSH預設安裝在C:\Program Files\ICW\
修改CopSSH設定
在C:\Program Files\ICW\etc\sshd_config中, 下面一行取消注釋並設為"no"
PasswordAuthentication no
建立一個windows賬戶
Control Panel > User Accounts > Create new account
在CopSSH中啟用這個賬戶
Start > Programs > Copssh > "Activate a user"
選擇一個賬戶,其他的用預設(/bin/bash, 等)
輸入密碼,這個密碼必須記住,將用來啟用私密金鑰。
在C:\Program Files\ICW\home, 每個賬戶有一個子目錄。將其中的<user>.key和<user>.key.pub和剛剛輸入的密碼發給使用者。
安裝一個空的git倉庫
如準備將D:\project1作為Git倉庫
在cmd中輸入如下命令
d:
cd \project1
md .git
cd .git
git --bare init
這樣,d:/project1就成為一個git倉庫
賦予使用者修改許可權
在D:\project1上右鍵 > 安全,允許剛建立的windows賬戶"寫"和"修改"
伺服器上開啟22連接埠
由於ssh伺服器不能找到git命令,需要如下操作:
Start > CopSSH > Start a unix bash shell.
cd /Bin
建立符號連結到git.exe, git-receive-pack.exe, git-upload-archive.exe, git-upload-pack.exe:
$ ln -s /cygdrive/c/Program\ Files/Git/bin/git.exe git.exe
$ ln -s /cygdrive/c/Program\ Files/Git/libexec/git-core/git-receive-pack.exe git-receive-pack.exe
$ ln -s /cygdrive/c/Program\ Files/Git/libexec/git-core/git-upload-archive.exe git-upload-archive.exe
$ ln -s /cygdrive/c/Program\ Files/Git/libexec/git-core/git-upload-pack.exe git-upload-pack.exe
(按自己的安裝git的路徑改,空格要轉為"\ ")
可選步驟:安裝Junction Link Magic
在C:\Program Files\ICW\home\使用者的目錄下建立一個空目錄,名稱為pro1
啟動Junction Link Magic,將git倉庫的目錄D:\project1 junction到C:\Program Files\ICW\home\使用者\pro1
伺服器設定結束
3. 用戶端上
對於使用者,要有
私密金鑰檔案如<user>.key
私密金鑰檔案的密碼
伺服器位址
伺服器上使用者的ID
安裝 msysgit
選擇plink
選擇將git放入windows path
安裝TortoiseGit
安裝後,在Settings > Network > SSH設定:
SSH Client = C:\Program Files\TortoiseGit\bin\TortoisePlink.exe
(下面的操作很可能不成功,需要另外的方式配置密鑰)
運行C:\Program Files\TortoiseGit\bin\puttygen.exe:
CopSSH中產生的密鑰是OpenSSH keys, 但這裡需要putty keys。將私密金鑰轉成putty格式的。
按 "Load" > 選擇檔案 <user>.key
找個地方儲存私密金鑰 <user>.ppk
運行C:\Program Files\TortoiseGit\bin\Pageant.exe
加入新產生的<user>.ppk,在詢問密碼時輸入密碼
注意: 每次啟動後,都需要運行Pageant.exe, 加入<user>.ppk, 並輸入密碼.
在我的機器上,TortoiseGit內建的puttygen不認CopSSH產生的OpenSSH keys,需要下載最新的puttygen
http://tartarus.org/~simon/putty-snapshots/x86/puttygen.exe 來產生ppk私密金鑰。
或另外一種方法是:使用puttygen產生ppk格式的私密金鑰,並將產生時上部顯示的公開金鑰替換OpenSSH的authorized_kyes中的內容。
不過這樣會導致無法互動式登入OpenSSH伺服器,但仍可繼續下面的操作。
4.開始使用
在使用者的機器上clone git倉庫
URL = <user>@<server>:d:/project1
或使用junction後的路徑
URL = <user>@<server>:pro1
如不使用Pageant.exe,就要設定"Load Putty Key" (yes) = (path to <user>.ppk).並且每次和伺服器的操作都要求輸入密碼。
注意:第一次串連伺服器時,會要求儲存伺服器的公開金鑰,選擇yes。
(這裡有個問題:git用戶端會報伺服器某個dll沒有找到,這時把git安裝目錄下的那個dll檔案複製到CopSSH的bin下就好)
如果伺服器上的git倉庫和CopSSH安裝在同一個盤符上,則可以省略盤符,如
URL = ssh://<user>@<server>/project1
Git是為Linux Kernel開發而設計的版本控制系統,因此其與Linux的結合非常緊密。這使得它在Linux下使用起來非常方便。但是對於習慣Windows的人就不那麼友好了。雖然目前也有msys-git和TortorseGit這樣的項目,使得在Windows上使用Git變得越來越方便。但目前一個明顯的缺陷就是要把自己的版本程式庫共用給其他人時,很不方便。
在Linux下,由於有完美的SSH支援,因此clone遠程機器的版本庫只要:
git clone user@remote.server.address:path/to/repo local_dir
就可以輕鬆搞定。那麼可以在Windows上配置好SSH,然後用和Linux下一樣的方式來使用git嗎?
可以的: 首先,需要安裝兩個工具:
1 - Git,Windows下的Git,還是msys-git比較好。
2 - SSH,可以用CopSSH,可以在Windows上啟動SSH服務,而不僅是用戶端。
安裝這兩個工具的過程沒有什麼難度。這裡假定Git是安裝在C:\Git目錄下,CopSSH安裝在C:\ICW目錄下。那麼當你安裝好以後,git已經可以從遠程得到版本庫,SSH也有一個使用者可以登入了。假定這個使用者是git(CopSSH預設沒有任何使用者可以登入,需要手動啟用一個設好密碼的Windows使用者)。
這時,從其它機器用git使用者通過ssh登入以後,可以執行ls,cd等基本命令。但是git任然不能運行。所以,也就還不能通過這個ssh來發布git版本庫了。要實現這個,需要做一些設定。
首先、需要在Git的安裝目錄裡找到cmd目錄,這裡就是C:\Git\cmd了。在裡面建立如下幾個檔案: git, git-upload-pack, git-upload-archive, git-receive-pack。這裡都沒有副檔名的,主要是給登入後,由bash執行的。每個檔案都只有一行,分別是:
git裡寫 git.cmd $*
git-upload-pack裡寫 git upload-pack $*
git-upload-archive裡寫 git upload-archive $*
git-receive-pack裡寫 git receive-pack $*
然後,就要給登入後的使用者添加path了,保證上面添加的命令可以找到,並執行。找到CopSSH安裝目錄的etc下的profile檔案。這裡就是C:\ICW\etc\profile了:在檔案最後添加兩行
gitpath=`/bin/cygpath C:/Git/cmd` #這裡不是引號,路徑是Git下的cmd,斜杠也要用Unix的習慣
export PATH="$PATH:$gitpath"
然後,用git使用者重新從SSH登入。就可以使用git命令了。
例如建立一個測試庫:
mkdir testgit
cd testgit
git init
touch a b c
git add .
git commit -m "init"
然後,就可以在遠程clone這個庫了。假定這台機器的ip是192.168.1.1。在另外一台機器上,
git clone git@192.168.1.1:testgit testgit
就可以clone成功了。這樣Windows下的Git+SSH服務就做成功了!
最後,說明一下目前知道的限制:
1)不能用link,也就是所有的檔案必須放在git使用者的home下。這個home的位置在 C:\ICW\home\git。
2)clone時不能用絕對路徑,只能寫相對於git使用者home的相對路徑。