windows上架設Git伺服器

來源:互聯網
上載者:User
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的相對路徑。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.