我一直建议在命令行中使用Git或者SVN。由于这样可能更加了解他们的工做方式,也不容易遗漏重要的问题和提醒。html
在Windows习惯的驱使下,大多数人是不会看弹出的对话框中有什么信息的,通常都是直接关掉。可是,版本库给咱们的提示信息都是很是重要的,有的是冲突,有的是提交失败,等等,这些都被略过了。linux
我碰到的关于版本库使用问题主要包括下面这些:git
其实若是在命令行中使用 Git 或者 SVN ,以上的问题应该都不会存在。由于命令行会事无巨细的给咱们提示,尤为是Git的命令行,会很是聪明的猜想咱们的意图并给咱们提示。
使用者要正确的使用命令行,就必须去仔细阅读版本库的文档。这样就能进一步了解版本库的工做原理,减小在使用中的错误。github
另外,Git的不少功能,尤为是高级功能,只有命令行能实现。编程
但并不是全部程序猿都愿意使用命令行工具,尤为是被Windows惯坏了的那批。windows
因此,有了TortoiseSVN和TortoiseGit。缓存
Git自带GUI界面。使用 git gui
命令能够打开它。在这个界面中能够完成commit、merge、push、pull等等经常使用操做。服务器
使用 gitk
能够打开查看Git版本库历史,在 git gui
中也有菜单能够打开它。session
我的觉得,彻底能够不用安装TortoiseGit,对于绝大多数程序猿来讲,这个界面已经足够了。app
可是,和“关于命令行”中说的那句话同样,并不是全部的程序猿都愿意使用这个 界面简陋到丑陋 的工具,尤为是被TortoiseSVN惯坏了的那批。
那些从SVN转换过来的程序猿,绝大多数都只用过TortoisSVN。那么好吧,就让界面、名字都彻底同样的TortoiseGit登场吧!
在TortoiseGit官方网站能够下载到它。有32bit和64bit版本,同时也有中文语言包(但我不建议你安装)。
安装完毕以后,若是你没有安装过Git,那么还须要去下载msysGit来安装。由于TortoiseGit其实只是一个壳,它须要调用Git命令行才能发挥做用。(如今你知道我为何推荐你用命令行了么?)
若是你不安装msysGit,那么在运行TortoiseGit的时候会弹出这个提示:
为何TortoiseGit不像TortoiseSVN同样,把SVN命令行工具集成在安装包中呢?我猜测是如下几点缘由:
msysGit的主页提供了两个项目:Git for Windows和msysGit,并写明了它们的详细区别。
我的认为,Git for Windows适合绝大多数程序猿(又见绝大多数 :D)。因此,强烈建议安装Git for Window。
msysGit使用一种很BT也很NB的方式来安装。先安装一个最小的MinGW/MSYS系统,而后使用git pull
全部的源码,调用gcc在本地编译成可执行文件。
若是本机安装过Cygwin,那么在安装msysGit的时候,cygwin的bin目录不能位于PATH环境变量中,不然msysGit会拒绝安装。
其实,若是你不在乎Cygwin提供的Git版本比较老,你彻底能够不安装Git for Windows或者msysGit,直接在TortoiseGit中设置Git.exe的路径为Cygwin的bin目录便可。
因为Cygwin目前的Git版本较老,在运行TortoiseGit的时候你会获得这个提示:
关于Cygwin、MinGW以及msysGit的关系和选择,能够看这篇文章:Cygwin与MinGW,如何选择?
还有这篇转载的文章:Msys/MinGW与Cygwin/gcc
我认为TortoiseGit最大的问题,就是在于它使用ppk密钥格式,而不是使用OpenSSH密钥格式。
由于linux系统是默认使用OpenSSH的,因此Git在基于命令行的时候是使用OpenSSH格式的密钥。
同理,gitolite这种服务器端程序使用的是OpenSSH格式的密钥。
因此,必须将原有的OpenSSH密钥转换成PPK密钥才能在TortoiseGit中使用。
在安装TortoiseGit的时候,你能够选择使用Putty仍是OpenSSH做为SSH客户端。安装程序中说,Putty和Windows配合得更好。
如何选择?我分别给出它们的特色:
Putty
OpenSSH
看完上面的特色,若是你仍是选择了Putty做为客户端的话,那么须要转换原有的OpenSSH密钥(若是有的话);
若是你依然义无反顾选择了OpenSSH做为客户端的话,我相信你已经知道如何生成、修改、配置SSH了,看来我也没必要罗嗦
可使用TortoiseGit自带的Putty Key Generator来转换原来的OpenSSH密钥到ppk格式。
打开该程序,选择 Conversions->Import Key
命令将OpenSSH 私钥 导入界面中,而后点击 Save private key
按钮将密钥保存成ppk格式。建议在 Key comment
中输入说明,不然密钥多了很难分辨。至于密码,为了方即可以不设置。
为了同时支持服务端和客户端,咱们能够在生成一个密钥的时候,同时生成该密钥的ppk格式和OpenSSH格式。而每一个密钥对都包含 公钥 和 私钥,两对一共是4个文件。这样就能够知足全部状况了。
打开Putty Key Generator,选择 Generator
按钮,晃动鼠标生成一个密钥,而后这样处理:
Save private key
按钮将密钥保存成 ppk格式私钥;Save public key
按钮将密钥保存成 ppk格式公钥;Conversions->Export OpenSSH Key
按钮将密钥保存成 OpenSSH格式私钥;若是使用Putty做为TortoiseGit的SSH客户端,那么就不能使用OpenSSH的 ~/.ssh/config 来定义使用不一样的端口和密钥访问SSH,而是须要使用 PuTTY Session。这篇文章进行了详细讲解: 在TortoiseGit中使用SSH host
也许是你一时 手贱……唔,手快选择了 putty 做为客户端,某天又良心发现想用 OpenSSH ,是否必须重装一次 TortoiseGit 来从新选择一次呢?
我曾经这样作过,直到我找到这个设置:
是的,只须要把 ssh客户端 改为 git for windows 提供的 ssh.exe 便可。若是用 Cygwin,那么这个程序在 cygwin/bin
目录中。
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
参数的做用:
# 签出时将换行符转换成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
就能够发挥做用了:
# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true # 容许提交包含混合换行符的文件 git config --global core.safecrlf false # 提交包含混合换行符的文件时候给出警示 git config --global core.safecrlf warn
我在Cygwin下以命令行的形式使用Git,同时也使用TortoiseGit。
在使用TortoiseGit签出使用cygwin提交的项目时,发现全部的文件权限都改变了:
$ 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了。
解决方法:
git config --global core.filemode false
git config core.filemode false
这个选择的在TortoiseGit中没有界面来设置,只能用命令行或者手动修改git配置文件。
由于 Mac OS X 已经自带了 git 工具,绝大多数状况下,不须要使用 GUI 工具。
若是必定要使用,那么建议使用下面两款:
个人选择主要参考 The Best Mac Git Gui 以及 Git 官网的 GUI Clients 。