git初学时需要了解的知识

来源:互联网 发布:js 滚动条居中 编辑:程序博客网 时间:2024/06/05 14:43

git:版本控制工具。

--------------------------------------------------------------------

先比较三个基于git的管理工具GitBash、EGit、SourceTree.

GitBash:以命令行方式管理版本,功能最为强大灵活。但是操作比较繁琐,不直观。

EGit:EclipseGit插件,很纠结的一个工具——优点是在开发时方便直接操作,但EGit自身很多的bug和不人性化的功能使它无法解决所有git问题,需要配合其他git管理工具。

SourceTree既有GitBash的命令行操作,又有EGit的图形化管理,比较人性化

-------------------------------------------------------------------------------------------------------

Windows上Git的安装使用

(1)下载Git支持环境----Git-1.7.3.1-preview20101002.exe并安装:http://msysgit.googlecode.com/files/Git-1.7.3.1-preview20101002.exe

(2)下载Git客户端----TortoiseGit-1.5.8.0-64bit.msi并安装:http://tortoisegit.googlecode.com/files/TortoiseGit-1.5.8.0-64bit.msi,我的机器是64位的,所以下了个64位的安装包,请根据情况选择适合自己的安装包

-------------------------------------------------------------------------------------------------------

<>EGit之我见:

EGit最大的好处是集成在eclipse里面,对于代码修改后提交很方便,常使用的部分是:

(1)简单的Commitpullpush

(2)Git repository(看资源库视图)(包括新建分支,切分支,合并分支)

(3)工程reset hard(强制覆盖本地版本),一些特殊情况会有问题。

(4)工程checkout到某一个分支,可以看当时的文件。

 

还原单个文件:Right click on the file -> Replace With -> File in Git Index

还原所有文件(操作慎之又慎):right click on the project -> Team -> Reset.. -> select the 'hard' radio button -> press the Reset button


<>GitBash之我见:

 一般通过命令行进行pull push 还有 status的操作,这个可以在网上找好多命令操作。命令行如果用好了是很不错的。


<>SourceTree之我见:

一个很好的工具SourceTree,可以说SourceTreeEGitGitBash的合体,既有图形化界面又有git命令行。

(1)基本的commitpullpush都拥有,而且一旦发生错误的时候提示很准确。

(2)基本的分支管理业有,最挫的Egit删除远程分支是假删除,SourceTree完美解决了这个问题。

(3)拥有EGit中的reset(重置)和checkout(签出)两大功能,而且更加稳定。最令我怀疑的EGitreset hard也有报错的时候,哎。SourceTree还是很稳定的。

(4) 那么最近用SourceTree,发现了一个很强大的功能,就是“丢弃”这个功能,和checkout其实原理是一样的。不过图形化界面肯定比较方便了。这里具体解释一下这个功能:

 

换句话说,你改了一批文件,如果想提交一部分,保留一部分,无疑命令行最麻烦。

然后你不满足,其中有几个文件你还想回滚,不想改了。那么SourceTree最容易。

这里需要注意一下命令行中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的分支存的是一个工程,所以每签出一个分支实际上都是签出一个工程。

Git的分支存的是修改的记录,所以每签出一个分支,实际上都是对原工程的一次覆盖。

B.在开发过程中大家可能会遇到这样一个问题:Pull之后,会出现很多别人提交的代码需要你本地再重新提交一次,那么这个原因是这样的,当然这个是我个人的理解:Git会把每一次pull结果做两个处理:

B1.如果pull之后,本地没有任何问题,那么不需要再次提交别人修改的东西了,只需要继续你的修改,push就可以了(正常情况下一版都是这样)。

B2.如果pull之后,本地有问题,大部分情况是冲突的情况,那么Git会把本次当做一次不成功的pull(那么通俗的来讲,git会认为,你认为不成功,那么你把这次版本按照你的想法改一下,再提交吧),所以你做完删减之后,需要把刚才别人的东西再提一次作为一个新的commit


(6) 对于checkout某一次提交,SourceTree也很人性化,会给出很人性化的提示。注意checkout之后,你的工程当前不属于任何分支,不过可以基于此重新创建一个分支,很方便。

 

总结一下:这里只列出了一些关键的问题和不同点,当然工具的选择因人而异。大家可以在工作中慢慢体会,如果有问题欢迎大家提出,给我宝贵的意见。




0 0