分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

本篇导读:

上篇介绍了一款Windows环境下的Git服务器工具GitStack ,搭建了最简单的Windows下的Git服务器,须要再次提醒的是GitStack是打包了相对较稳定的Git原生版本的,喜欢使用命令行的同窗,并不影响你。GitStack仅仅是提供了一套界面化操做和一个Http服务。本篇将深刻介绍如何使用强大客户端Git工具TortoiseGit进行分支切换、合并等操做。html

1. 建立分支web

分支在Git中能够说很是的方便实用,首先咱们在什么状况下须要建立分支呢?安全

在这点上Git和SVN理念上就有差别。SVN的分支通常做为管理员事先分配好分支的用途,开发人员不能随意建立。而Git你想建就建吧,你本身知道分支是什么就行。服务器

Git中每一个开发者最好都有一个本身的分支。而后能够再建立分支做为阶段备份,做为试验品,干什么都行。最后,你把你的试验成果合并到本身的分支上。再而后若是本身的分支相对稳定,再提交到主干上。分布式

固然master是否采纳你的分支所有或部分,这是master的工做。这样的自由开发方式,是否是心动了呢,继续看下去吧!工具

话很少说,咱们直入主题,下面看下如何建立一个分支。学习

在项目 主文件夹右击或打开主项目文件件,在空白处右击,选择TortoiseGit,选择创“建立分支”测试

输入一个分支名称,"Yu_V1"表示我我的的第一个版本,下面切换到新分支若是选中,建立完成后,工做环境将切换到新分支了,若是没选,也能够很方便的切换spa

完成分支建立之后,咱们更新增一个文件“个人第四个文件.txt”命令行

新建文件后,咱们在空白区域右击,发现提交默认变成了 提交到 Yu_V1 

进入提交,输入备注,选中新建的文件四,在这个窗口能够看到当前所要提交的分支名称

2. 切换分支

这时,若是咱们要回到主干怎么办呢,Git的分支切换很是方便

项目目录空白处右击,TortoiseGit=> 切换/检出

在切换窗口,咱们能够很方便的切换到任一分支,假如咱们切换到master

咱们会发现,分支Yu_V1中第四个文件没有了,右击空白,会发现切换到了master.

第四个文件并不会丢失,当咱们再次切换回分支Yu_V1的时候,第四个文件又会回来了

这就是Git强大的地方,他在服务器上存储了一个文件库(以元数据方式存储),再存储了一个版本及分支更改等的变动信息库,每次咱们切换的时候向服务端发送了一个请求,服务端则根据咱们的请求变动咱们的项目中的文件。

整个过程就是快速的传输,服务器上并不会一一存储各个分支的文件副本,这也是Git服务端版本库不会暴增的主要缘由。

(我会在介绍过程当中,慢慢把Git的工做原理切入进来)

3. 查看日志

项目目录空白处右击,TortoiseGit=> 显示日志

如上图,在打开的显示日志窗口中,咱们能够看到若是建立了分支,日志信息中会在变动信息前显示一个分支名称,以方便咱们了解是哪个分支的变动

咱们再次建一个文件,建立一个新分支Yu_V2,将新建的文件提交到该分支,再次查看日志 

能够看到红色表示当前所在分支,绿色表示其余分支变动信息

4. 查看版本分支图

项目目录空白处右击,TortoiseGit=> 查看版本分支图

在打开的分支图窗口中,能够看到版本分支的建立历史流程

5. 合并分支

项目目录空白处右击,TortoiseGit=> 合并

在弹出的合并窗口中,咱们先选择一个分支,合并至当前分支(这里必定要注意,合并关系,若是要最终合并到那个分支,先切换到该分支,再选一个合并目标)

提示合并完成,是否是很是简单。

6. 删除分支和分支改名

项目目录空白处右击,TortoiseGit=> 切换/检出

在切换界面中,分支选择后面的选择按钮打开,如上图右侧窗口,能够更新和删除某个分支,注意,不能删除当前分支,若是要删除当前分支,请换到到其余分支进行操做

7. 推送

项目目录空白处右击,TortoiseGit=> 推送

在推送窗口中,若是选择 推送全部分支,则本地库中全部分支都被推送到服务器,默认为推送当前分支。咱们能够选择推送到其余分支,而提交只能提交到远程的对应分支或新建分支。

咱们能够随时在服务器端GitStack中查看咱们的项目提交状况

打开GitStack,找到咱们建立的版本库"MyGitObject",点击右边的“浏览”按钮,以下图

在服务端,咱们能够很方便的查看推送到服务器的文件及分支信息。

8. 更新版本库

前面咱们已经熟悉了从远程服务器克隆一个版本库到本地及从本地推送给Git,在项目推动过程当中,咱们如何及时获取其它分支的更新内容呢,接下来将介绍这点。

关于更新本地库,这里有两个操做,若是你是中文版本的TortoiseGit很容易搞错,这就是语言差别。

中文版本 分别为 拉取和获取 对应英文版为 Pull(拉取)和Fetch(获取)

在这里一块儿介绍这两个指令,他们有什么区别呢?

拉取(Pull)会从远程取得最新版本而后合并(Merge)到本地库

获取(Fetch)则会从远程取得最新版本,并不会合并(Merge)到本地库

能够说 拉取(Pull)=获取(Fetch)+合并(Merge)

从安全角度来讲,Fetch更安全,由于咱们能够 先Fetch新版本,而后进行差别比较后,再选择性的 Merge 。这也是推荐作法,即先Fetch到一个本地副本分支,而后将该副本分支和本地版本比较,合并后,再提交到远程主机。

获取和拉取的操做很简单

项目目录空白处右击,TortoiseGit=> 拉取(Pull)

项目目录空白处右击,TortoiseGit=> 获取(Fetch)

9. 差别比较

9.1 比较分支版本差别

咱们该如何查看分支1和分支2的差别呢?TortoiseGit为咱们提供了很方便的功能

项目目录空白处右击,TortoiseGit=> 查看日志

9.2 比较同一分支当前版本和上一版本差别

项目目录空白处右击,TortoiseGit=> 比较与上一版本差别

9.3 比较两个文件差别

选中项目中两个文件 右击,TortoiseGit=> 比较差别

打开文件差别比较窗口,以下

也能够在某个文件上右击,选择”与上一版本差别“来查看某个文件的更改内容

10. 还原

若是某次操做咱们后悔了,可使用还原,将还原到上次提交前的状态。

项目目录空白处右击,TortoiseGit=> 还原

注意:还原只能还原到最近一次提交时的状态, 以前提交的的版本怎么还原呢,也是有办法的,以下:

项目目录空白处右击,TortoiseGit=> 查看日志

选中一个历史版本,右击,点”重置到这个版本“将把版本回退到以前的版本。

11. Git中解决冲突

使用Git这种非锁定式的版本控制系统之后,不少初学者都有解决冲突恐惧症,分布式的开发给咱们带来便利的同时,产生冲突也是正常的。所谓防范胜于救灾,咱们能够避免,如何避免呢?

(1)首先团队在开发过程当中须要有明确规范;

(2)开发人员须要及时获取新版本;

(3)修改后,必定要及时递交;

即便作到以上三点,仍然会有冲突的存在,解决冲突并不可怕,经过上面的介绍,咱们能够看到GIT给咱们提供了许多辅助功能,好比文件差别比较,版本差别比较等。咱们要充分利用这些便利解决问题。

通常冲突主要有三种:逻辑冲突、树冲突、内容冲突

这三种冲突如何应对呢?

(1)逻辑冲突

产生缘由:好比A方法做用是返回从0-5的随机数1个,可是同事在没有更改方法名的状况下,改为了方法返回6-9的随机数1个。若是拉回同事提交的版本库,应用该方法后,就会出现程序逻辑错误。

解决办法:首先咱们在使用获取一个副本支的方式更好,避免了这一问题,若是冲突,咱们能够获取版本后,使用恢复功能,或修改冲突再提交。沟通很重要,通常这种BUG都是事先没有沟通好。

(2)树冲突

产生缘由:两我的同时修改一个文件名

解决办法:其中一我的获取新版本,而后删除本身改过名的文件,双方协商好用什么名字,再由其中一人更改,另外一人获取新版本便可。

(3)内容冲突

产生缘由:两我的同时改了同一文件的同一位置内容

解决办法:提交文件产生这种冲突时,咱们利用文件差别比较,查看两个文件内容冲突的位置手动更改,而后推送到服务器。

12. 分支管理策略

Git在分支建立和合并上为咱们带来史无前例的便利,同时版本四处开花,分支遍地,很容易让初次使用者找不到主干发展方向。这就须要咱们学习一下工做流,Git的工做流网上有不少大神介绍,本篇文章不能一一列举了。可是Vincent Driessen的分支管理策略获得了众多支持者。咱们分享一下他的成果。

他的策略可使版本库演进保持简洁、主干清晰、分支各司其职。

(1) Master分支(主分支)

首先,代码库应该有一个、且仅有一个主分支。全部提供给用户使用的正式版本,都在这个主分支上发布。Git主分支的名字,默认叫作Master。它是自动创建的,版本库初始化之后,默认就是在主分支在进行开发。咱们能够给主分支上的每一个版本库打上tag,为了更好的管理。

(2)开发分支Develop

主分支只用来分布重大版本,平常开发应该在另外一条分支上完成。咱们把开发用的分支,叫作Develop。

若是想正式对外发布,就在Master分支上,对Develop分支进行”合并”(merge)。

(3)临时性分支

前面讲到版本库的两条主要分支:Master和Develop。前者用于正式发布,

后者用于平常开

发。其实,常设分支只须要这两条就够了,不须要其余了。可是,除了常设分支之外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种: * 功能(feature)分支

* 预发布(release)分支

* 修补bug(fixbug)分支

这三种分支都属于临时性须要,使用完之后,应该删除,使得代码库的常设分支始终只有Master和Develop。

功能分支

第一种是功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。

预发布分支

第二种是预发布分支,它是指发布正式版本以前(即合并到Master分支以前),咱们可能须要有一个预发布的版本进行测试。

预发布分支是从Develop分支上面分出来的,预发布结束之后,必须合并进Develop和Master分支。它的命名,能够采用release-*的形式。

修补Bug分支

最后一种是修补bug分支。软件正式发布之后,不免会出现bug。这时就须要建立一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束之后,再合并进Master和Develop分支。它的命名,能够采用fixbug-*的形式。

  

合并完成之后的修补Bug分支要删除的。

对于分支管理策略,我推荐一篇文章,能够参考一下:http://www.cnblogs.com/cnblogsfans/p/5075073.html

13. 本篇要点

本篇主要介绍了Git的分支、合并、分支切换、差别比较、冲突解决等,使用TortoiseGit界面化的客户端工具,让咱们在使用过程当中更加简单了,先理解了Git的工做流程和使用方法,再慢慢了解一下命令行,也是不错的。其实界面化的工具每一步指令的本质仍是命令行。在写这篇文章的同时,我也参考了不少博客,在此表示感谢。TortoiseGit还有不少功能没有一一介绍,相信有了本篇的基础,上手不是难事了。

相关文章
相关标签/搜索