最近要做一個源碼管理服務器,權衡了一下還是git最適合,搭建服務器前看了網上一些windows下搭建git服務器的帖子,感覺還比較簡單,沒有太多需要配置的地方,於是開始動手。
我選擇的是 gitfor windows + Tortoisegit + Copssh
gitfor windows下載地址 http://msysgit.github.io/ 最新版的 Git-1.9.4-preview20140611
putty 用來測試ssh連接 同時還需要工具 puttygen 用來轉換 copssh生成的私鑰,它們兩個格式不一樣,連接的時候不注意就會在這里出問題,我就栽到這個坑里。
先安裝Copssh 再 gitfor windows ,Tortoisegit 安裝過程比較簡單,不想羅列太多的圖片,不清楚怎么安裝的去找度娘。
安裝好之后,有幾點需要注意的:
1. 配置Tortoisegit:TortoiseGit>Settings
配置好git路徑
2. 創建一個git賬戶管理員權限
3. 在copssh里激活 git 用戶
用戶激活成功,下面生成公鑰和私鑰
輸入密碼,此密碼為ssh密鑰登陸密碼。私鑰名稱,私鑰默認放在 copssh 安裝目錄 \ICW\home\用戶名 下面 ,公鑰在 \ICW\home\用戶名\.ssh 下面 名稱為:authorized_keys
ok,公鑰跟私鑰生成成功,下面打開puttygen 將私鑰轉換成 putty格式
點擊 Load 選擇剛才生成的 private_key.ppk 文件,輸入密碼
點擊 Save private key 保存私鑰,注意不要覆蓋原來的私鑰,copssh 私鑰格式跟 putty私鑰格式不一樣,測試ssh連接時用 puttygen 生成的私鑰
客戶端git連接ssh服務器的時候要用copssh生成的私鑰。 我在剛開始搭建服務器的時候客戶端用的putty生成是私鑰,putty測試連接沒有問題,用
git 連接是老是報沒有權限,郁悶了一天后來才發現問題出在這里。
4. 找到copss安裝目錄C:\Program Files (x86)\ICW\etc
下面的sshd_config,跟ssh_config 文件
PasswordAuthentication 設置為 no
port 設置為 22
防火牆打開22端口 用 telnet 命令鏈接查看是否能夠連接,沒問題接着下面走
根據自己的安裝目錄, 將C:\Program Files (x86)\Git\libexec\git-core目錄下的git.exe , git-receive-pack.exe , git-upload-archive.exe , git-upload-pack.exe復制到C:\Program Files (x86)\ICW\bin目錄下
C:\Program Files (x86)\Git\bin 目錄下的libiconv-2.dll復制到 C:\Program Files (x86)\ICW\bin目錄下
用putty 測試是否能夠連上服務器
填上服務器名稱端口
Author選項,導入私鑰點擊 open ,如果能夠連接說明ssh服務器搭建成功。
5. 客戶端Git配置
(最好的做法是在客戶端用 ssh-keygen -t rsa 生成公鑰跟私鑰 把公鑰加到 服務器 \ICW\home\用戶名\.ssh 下面 authorized_keys 里面
私鑰放到 客戶端 用戶名/.ssh 目錄下)
將生成的私鑰放到客戶端 用戶名/.ssh 目錄下
同目錄下添加 config文件,注意沒有擴展名
文件輸入如下內容
Host server #執行git命令時服務器別名#
HostName 192.168.1.110 #這里是你服務器的地址#
User git #登陸服務器用戶名#
IdentityFile ~/.ssh/private_key.ppk #私鑰地址#
6. 服務器端 在\ICW\home\用戶名 下用Tortoisegit 創建一個文件夾 test.git
右鍵 Git Create repository here.. 勾選 Make it Bare ( No working directories) 創建空倉庫
7. 客戶端執行 $git clone git@server:test.git 輸入密碼
ok,克隆成功至此git服務器搭建好了!
可能遇到的問題:
A. 私鑰不要搞混了用 putty 連接同 git 連接是用兩不同的私鑰,私鑰不對是話會報錯:
Permission denied (keyboard-interactive).
fatal:Could not read from remote repository.
如果出現這種情況不能確認是否是私鑰有問題時可以這樣處理:
到服務器端激活密碼驗證,
找到copss安裝目錄C:\Program Files (x86)\ICW\etc
下面的sshd_config,跟ssh_config 文件
PasswordAuthentication 設置為 yes
這樣的話連接服務器需要輸入git用戶 的用戶密碼,通過用戶名登陸,不走密鑰驗證,如果能連接成功,說明一定是私鑰問題。
B. 缺少文件
我在克隆時碰到過缺少libiconv-2.dll 的情況
git 提示 /user/bin/git-upload-pack.exe: error while loading shared libraies: libiconv-w.dd: cannot open shared object file: No such file or directory
只需將C:\Program Files (x86)\Git\bin 目錄下的libiconv-2.dll 復制到 C:\Program Files (x86)\ICW\bin目錄下就可以了
第一篇博文,沒太注意排版,目的是幫大家解決問題,如果看了我的文章真對大家有所幫助請贊一下咯!