Git管理工具对照(GitBash、EGit、SourceTree)
GitBash是採用命令行的方式对版本号进行管理,功能最为灵活强大,可是由于须要手动输入希望改动的文件名称,所以相对繁琐。
EGit是Eclipse的Git插件,最为纠结的一个软件,由于开发时直操作非常方便,尤其是有svn开发情节的人更热衷于这样,只是EGit中有非常多bug和不人性化的东西,让人吐血,所以
一句话EGit并不能解决全部Git问题,开发时必须部分依赖于其它Git管理工具。一会一一列举。
SourceTree是近期应用的一个软件,一句话概括,既有GitBash的命令行,又有EGit的图形化管理,用户界面非常人性化,Eclipse+GitBash全然能够应付版本号管理。
那么以下我结合项目中开发遇到的问题一一解说一下:
<一>EGit之我见:
EGit最大的优点是集成在eclipse里面,对于代码改动后提交非常方便,当中我最常使用的部分是:
(1)简单的Commit,pull,push。
(2)Git repository(看资源库视图)(包含新建分支,切分支,合并分支)
(3)projectreset hard(强制覆盖本地版本号),一些特殊情况会有问题。
(4)projectcheckout到某一个分支,能够看当时的文件。
(5)projectshow in history (查看project变更历史),没有时分秒,非常不爽。
其它的功能我用的不多,由于EGit确实有非常多bug,犯过血淋淋的错误。
这里解释一下,为什么第一条我要加上”简单的”,由于非常多时候没有pull下来,或者没有push上去,提示的信息非常粗,有时候甚至误以为提交,发现过非常多问题,所以假设确定如今没人和你同一时候改同一个文件,用EGit还是非常爽的。
<二>GitBash之我见:
一般我主要通过命令行进行pull push 还有 status的操作,这个详见我前一篇文章
《Git Bash+EGit在项目中配合使用最经常用法总结》,命令行用好了非常是非常不错的,除了那种须要手写文件名称的时候,比較不爽,一两个还能够,多了就吐血了。
<三>SourceTree之我见:
这个是我近期才发现了一个非常好的工具SourceTree,能够说SourceTree是EGit和GitBash的合体,既有图形化界面又有git命令行。
(1)主要的commit、pull、push都拥有,并且一旦错误发生的时候提示非常准确。
(2)主要的分支管理业有,最挫的Egit删除远程分支是假删除,SourceTree完美攻克了这个问题。
(3)拥有EGit中的reset(重置)和checkout(签出)两大功能,并且更加稳定。最令我怀疑的EGit的reset hard也有报错的时候,哎。SourceTree还是非常稳定的。
(4) 那么近期用SourceTree,发现了一个非常强大的功能,就是“丢弃”这个功能,和checkout事实上原理是一样的。只是图形化界面肯定比較方便了。这里具体解释一下这个功能:
换句话说,你改了一批文件,假设想提交一部分,保留一部分,无疑命令行最麻烦。
然后你不满足,当中有几个文件你还想回滚,不想改了。那么SourceTree最easy。
这里须要注意一下命令行中checkout 是指未add的,那么能够回滚到近期的线上的commit状态。假设add之后又改动,那么会回滚到add之后的状态。
这一个原理,在Source体现的更明显,例如以下:
A. 首先我先将改动后的personRiskBase.jsp拖到缓存区中(1)。
图(1)
B. 然后再次改动,发现以下的工作区中也有这个页面了(图2)。
(图2)
C. 如今就能够对此文件进行丢弃了,假设将以下文件丢弃(checkout),那么该文件将变为缓冲区中的文件,假设将缓冲区文件丢弃,实际上回到了近期的commit版本号了(reset操作)。
这里注意,假设该文件commit了,那么checkout实际上回不到commit之前的版本号的,须要reset。以下具体介绍一下reset命令。
(5) 对于reset功能的应用。这里先普及一下Git理念的事:
A. 明白一点,每一次commit都是相应着一批操作而不是相应一个文件。
这点和SVN的设计理念全然不一样。
这也造成了一个必定的结局:SVN的分支存的是一个project,所以每签出一个分支实际上都是签出一个project。
而Git的分支存的是改动的记录,所以每签出一个分支,实际上都是对原project的一次覆盖。
B.在开发过程中大家可能会遇到这样一个问题:Pull之后,会出现非常多别人提交的代码须要你本地再又一次提交一次,那么这个原因是这种,当然这个是我个人的理解:Git会把每一次pull结果做两个处理:
B1.假设pull之后,本地没有不论什么问题,那么不须要再次提交别人改动的东西了,仅仅须要继续你的改动,push就能够了(正常情况下一版都是这样)。
B2.假设pull之后,本地有问题,大部分情况是冲突的情况,那么Git会把本次当做一次不成功的pull(那么通俗的来讲,git会觉得,你觉得不成功,那么你把这次版本号依照你的想法改一下,再提交吧),所以你做完删减之后,须要把刚才别人的东西再提一次作为一个新的commit。
(6) 对于checkout某一次提交,SourceTree也非常人性化,会给出非常人性化的提示。注意checkout之后,你的project当前不属于不论什么分支,只是能够基于此又一次创建一个分支,非常方便。
总结一下:这里仅仅列出了一些关键的问题和不同点,当然工具的选择因人而异。大家能够在工作中慢慢体会,假设有问题欢迎大家提出,给我宝贵的意见。(待续)