我一直建议在命令行中使用Git或者SVN。由于这样可能更加了解他们的工做方式,也不容易遗漏重要的问题和提醒。html
在Windows习惯的驱使下,大多数人是不会看弹出的对话框中有什么信息的,通常都是直接关掉。可是,版本库给咱们的提示信息都是很是重要的,有的是冲突,有的是提交失败,等等,这些都被略过了。linux
我碰到的关于版本库使用问题主要包括下面这些:git
其实若是在命令行中使用 Git 或者 SVN ,以上的问题应该都不会存在。由于命令行会事无巨细的给咱们提示,尤为是Git的命令行,会很是聪明的猜想咱们的意图并给咱们提示。
使用者要正确的使用命令行,就必须去仔细阅读版本库的文档。这样就能进一步了解版本库的工做原理,减小在使用中的错误。github
另外,Git的不少功能,尤为是高级功能,只有命令行能实现。编程
但并不是全部程序猿都愿意使用命令行工具,尤为是被Windows惯坏了的那批。windows
因此,有了TortoiseSVN和TortoiseGit。缓存
Git自带GUI界面。使用 git gui
命令能够打开它。在这个界面中能够完成commit、merge、push、pull等等经常使用操做。bash
使用 gitk
能够打开查看Git版本库历史,在 git gui
中也有菜单能够打开它。服务器
我的觉得,彻底能够不用安装TortoiseGit,对于绝大多数程序猿来讲,这个界面已经足够了。session
可是,和“关于命令行”中说的那句话同样,并不是全部的程序猿都愿意使用这个 界面简陋到丑陋 的工具,尤为是被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了,看来我也没必要罗嗦 :D
可使用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
参数的做用:
1
2
3
4
5
6
7
8
|
git config --global core.autocrlf true
git config --global core.autocrlf input
git config --global core.autocrlf false
|
这些选项在TorgoiseGit中也能够设置。
个人建议是在不管在什么系统下编程,都把全部人的编辑器的换行符模式设置成Unix格式,而后把autocrlf设置成false,这样一劳永逸。
毕竟除了Windows记事本这类软件外,已经不多有文本编辑器不支持换行符设置了。
若是你把换行符搞乱了,在一个文件中既包含windows风格的换行符也包含unix风格换行符,那么 safecrlf
就能够发挥做用了:
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
|
我在Cygwin下以命令行的形式使用Git,同时也使用TortoiseGit。
在使用TortoiseGit签出使用cygwin提交的项目时,发现全部的文件权限都改变了:
1
2
3
4
|
diff --git a/launch4j/spritesheet_conterver.xml b/launch4j/spritesheet_conterver.xml
old mode 100755
new mode 100644
|
这是由于msysgit是一个类Unix模拟器,须要拥有Unix形式的文件访问权限。而因为Windows的种种限制,信息不能复原,从而致使原来的755成644了。
解决方法:
1
2
|
git config --global core.filemode false
git config core.filemode false
|
这个选择的在TortoiseGit中没有界面来设置,只能用命令行或者手动修改git配置文件。
在文件名和路径名中包含中文的时候, git status
的显示是这样的:
1
2
3
4
5
6
7
8
|
git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
"\344\275\240\345\245\275.txt"
nothing added to commit but untracked files present (use "git add" to track)
|
要解决这个问题,只须要告诉 git 不对 0x80
以上的字符进行转义便可:
1
|
git config --global core.quotepath false
|
查看 官方说明 :
The commands that output paths (e.g. ls-files, diff), when not given the -z option, will quote “unusual” characters in the pathname by enclosing the pathname in a double-quote pair and with backslashes the same way strings in C source code are quoted. If this variable is set to false, the bytes higher than 0x80 are not quoted but output as verbatim. Note that double quote, backslash and control characters are always quoted without -z regardless of the setting of this variable.
使用后效果以下:
1
2
3
4
5
6
7
8
|
git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
你好.txt
nothing added to commit but untracked files present (use "git add" to track)
|
由于 Mac OS X 已经自带了 git 工具,绝大多数状况下,不须要使用 GUI 工具。
若是必定要使用,那么建议使用下面两款:
个人选择主要参考 The Best Mac Git Gui 以及 Git 官网的 GUI Clients 。
原文地址:https://blog.zengrong.net/post/1722.html