简述
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了。