簡述
git原本在linux使用應當更流行的,目前windows的支援也很好了。git做代碼版本控制有很多優勢,至于和svn的比較,網上資源很多,這兩種都用,覺得都不錯的。
軟體
windows下需要安裝下windows版本的msysgit,另外還安裝了TortoiseGIT:
軟體的安裝就不用多說了,直接一路安裝即可,速度也很快的。
場景
這裡是指已經配置好了git server了,code repository都放在了git server了,現在使用的windows PC就是一個用戶端,本地可以擷取server的代碼,在本地進行開發調試和測試,然後将代碼可以commit到server端。
本地的一些設定
環境變量配置
TortoiseGIT貌似會自動設定好windows的環境變量的,而GIT的bin目錄中的許多可執行工具的路徑并沒有添加到環境變量,如我的GIT的bin目錄路徑添加到系統環境變量為:
這樣,之後通過在windows的指令行終端下輸入ssh-keygen等指令時就能起作用了,不然會提供找不到指令之類的提示。
SSH配置
SSH RSA key生成,用ssh-keygen生成即可。
Git環境配置
$ git config --global user.name "username"
$ git config --global user.email emailaddress
public key添加
登陸git伺服器,将ssh-keygen生成的public key添加即可。
注意:其實從上面的SSH配置,Git環境配置,到這裡的public key添加,都是對于linux下使用而言的,在windows下使用TortoiseGit并不是用的這個ssh-keygen生成的key的。是以從SSH配置開始的内容對windows下使用應當沒有用,不過已經做過了,也不妨礙,先那樣吧。
Windows下的Key生成與使用
其實用的是TortoiseGit的PuttyKeyGen工具來生成的Public/Private的一對Key。
打開之後直接點選Generate來幫助生成一對Public/Private Key(在生成過程中,需要在該界面上不斷晃動滑鼠,生成速度就會很快,感覺其内部随機數是取的滑鼠的位置值……):
生成之後:
分别點選其中的Save public Key和Save private key,儲存這一對Public/Private Key,具體的存儲位置自己選擇就好。
這樣,有了這對key,将其中的public key添加到git server的頁面。然後使用TortoiseGit進行git clone操作:
在Load Putty Key的位置加載剛才儲存的private key,這樣點選OK,即可成功從git server進行check out了!
commit-msg添加
commit-msg添加到C:\Program Files\Git\share\git-core\templates\hooks。
問題
git did not exit cleanly (exit code 128)
使用TortoiseGIT的git clone操作:
開始上圖中的Load Putty Key是需要勾選的,但是我用的SSH public key,并沒有生成什麼Putty Key(Putty是用來遠端安全連接配接的,即SSH連接配接)。然後從網上找了下用TortoiseGIT工具生成putty key,不過覺得沒什麼用才對。然後點選OK,出現如下錯誤:
關閉之,console界面顯示git did not exit cleanly (exit code 128),于是查找該問題,做如下處理:
- 滑鼠右鍵 -> TortoiseGit -> Settings -> Network
- SSH client was pointing to C:\Program Files\TortoiseGit\bin\TortoisePlink.exe
- Changed path to C:\Program Files (x86)\Git\bin\ssh.exe
這樣再試就變成上圖的Load Putty Key變灰的形式了。
不過這裡的處理并沒有幫我解決問題,是以又改回去了。
Permission denied (publickey)
繼上面問題之後,繼續用TortoiseGIT進行git clone,然後……然後還是沒有成功,提示如下資訊:
Permission denied (publickey).
fatal: Could not read from remote repository.
很明顯,似乎是我本地的SSH public key不對,嗯,明明配置并添加到server的project頁面了啊,本地也儲存了該SSH public key的xxx.pub了的。
問題原因:就是上面的public key添加部分提到的,實際上用TortoiseGit并不用這個Key,因為TortoiseGit操作時還需要一個private key,是以必須用PuttyKeyGen工具來生成public/private key pair了。