TortoiseGit的密钥

TortoiseGit的密钥

我认为TortoiseGit最大的问题,就是在于它使用ppk密钥格式,而不是使用OpenSSH密钥格式。
因为linux系统是默认使用OpenSSH的,所以Git在基于命令行的时候是使用OpenSSH格式的密钥。
同理,gitolite这种服务器端程序使用的是OpenSSH格式的密钥。
所以,必须将原有的OpenSSH密钥转换成PPK密钥才能在TortoiseGit中使用。

在安装TortoiseGit的时候,你可以选择使用Putty还是OpenSSH作为SSH客户端。安装程序中说,Putty和Windows配合得更好。

gitold

如何选择?我分别给出它们的特点:

Putty

  1. Putty有GUI界面,可以通过配置sessions来访问不同的git服务器端口
  2. Putty有GUI程序(Putty Key Generator)来生成密钥;
  3. 如果使用Putty作为SSH客户端,那么传输速度可能会比较慢(个人感觉,当然也有人和我有一样的感觉);
  4. Putty不能直接使用原有的OpenSSH密钥,必须将其转换成PPK密钥才行。

OpenSSH

  1. OpenSSH是Git命令行程序默认使用的SSH客户端程序;
  2. Git for Windows默认就包含了OpenSSH程序;
  3. 你可以利用已有的OpenSSH密钥,不用做转换(例如我原来用cygwin的时候积累了一堆OpenSSH密钥,现在只需要在~/.ssh下做一个符号链接就能用了);
  4. GitHub/bitbucket等Host使用的都是OpenSSH密钥;
  5. 大多数Linux发行版默认使用OpenSSH作为服务端;
  6. 你可以方便的使用命令行程序来实现自动化处理。

看完上面的特点,如果你还是选择了Putty作为客户端的话,那么需要转换原有的OpenSSH密钥(如果有的话);
如果你依然义无反顾选择了OpenSSH作为客户端的话,我相信你已经知道如何生成、修改、配置SSH了,看来我也不必罗嗦 :D

转换OpenSSH密钥到ppk格式

可以使用TortoiseGit自带的Putty Key Generator来转换原来的OpenSSH密钥到ppk格式。

打开该程序,选择 Conversions->Import Key 命令将OpenSSH 私钥 导入界面中,然后点击 Save private key 按钮将密钥保存成ppk格式。建议在 Key comment 中输入说明,否则密钥多了很难分辨。至于密码,为了方便可以不设置。

putty_key_generator

生成OpenSSH和ppk格式的密钥

为了同时支持服务端和客户端,我们可以在生成一个密钥的时候,同时生成该密钥的ppk格式和OpenSSH格式。而每个密钥对都包含 公钥 和 私钥,两对一共是4个文件。这样就可以满足所有情况了。

打开Putty Key Generator,选择 Generator 按钮,晃动鼠标生成一个密钥,然后这样处理:

  • 点击 Save private key 按钮将密钥保存成 ppk格式私钥
  • 点击 Save public key 按钮将密钥保存成 ppk格式公钥
  • 点击 Conversions->Export OpenSSH Key 按钮将密钥保存成 OpenSSH格式私钥
  • 获取上图红框中的所有文本内容,粘贴到文本编辑软件中,保存为一个单行的文件,这就是OpenSSH格式公钥
在TortoiseGit中使用SSH host

如果使用Putty作为TortoiseGit的SSH客户端,那么就不能使用OpenSSH的 ~/.ssh/config 来定义使用不同的端口和密钥访问SSH,而是需要使用 PuTTY Session。这篇文章进行了详细讲解:http://zengrong.net/post/1775.htm

换行符的问题 autocrlf and safecrlf

Windows(\r\n)、Linux(\n)和MacOS(\r)三个主流系统的换行符各不相同,这样在跨平台合作的时候就容易出现换行符的问题。

Git提供了 autocrlf 和 safecrlf 两个参数来解决这个问题。但这两个参数如果没用好,就会影响开发。

例如,出现这种情况:

A和B两个开发人员,A使用LF(\n)做换行符,B使用CRLF(\r\n)做换行符,且都没有开启 autocrlf 参数,那么A在迁出B的文件,并使用自己的编辑器打开之后就会发现,虽然没有对文件做任何修改,但它的状态是modified。这是由于A的编辑器自动将B的文件中的所有换行符替换成了(LF),这与版本库中的(CRLF)不同。

让我们来看看 autocrlf 参数的作用:

? View Code BASH
1
2
3
4
5
6
7
8
# 签出时将换行符转换成CRLF,签入时转换回 LF。
git config --global core.autocrlf true
 
#签出时不转换换行符,签入时转换回 LF
git config --global core.autocrlf input
 
#签出签入均不转换
git config --global core.autocrlf false

这些选项在TorgoiseGit中也可以设置。

我的建议是在无论在什么系统下编程,都把所有人的编辑器的换行符模式设置成Unix格式,然后把autocrlf设置成false,这样一劳永逸。
毕竟除了Windows记事本这类软件外,已经很少有文本编辑器不支持换行符设置了。

如果你把换行符搞乱了,在一个文件中既包含windows风格的换行符也包含unix风格换行符,那么safecrlf 就可以发挥作用了:

? View Code BASH
1
2
3
4
5
6
7
8
# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
 
# 允许提交包含混合换行符的文件
git config --global core.safecrlf false 
 
# 提交包含混合换行符的文件时候给出警示
git config --global core.safecrlf warn

文件权限问题 755 and 664

我在Cygwin下以命令行的形式使用Git,同时也使用TortoiseGit。
在使用TortoiseGit签出使用cygwin提交的项目时,发现所有的文件权限都改变了:

? View Code BASH
1
2
3
4
$ git diff 
diff --git a/launch4j/spritesheet_conterver.xml b/launch4j/spritesheet_conterver.xml
old mode 100755
new mode 100644

这是因为msysgit是一个类Unix模拟器,需要拥有Unix形式的文件访问权限。而由于Windows的种种限制,信息不能复原,从而导致原来的755成644了。

解决方法:

? View Code BASH
1
2
git config --global core.filemode false
git config core.filemode false

这个选择的在TortoiseGit中没有界面来设置,只能用命令行或者手动修改git配置文件。

转载于:http://zengrong.net/post/1722.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值