程序开发版本控制问题研究
本文讨论了版本控制的作用,通过调研比较当今主流的几大版本控制工具例如CVS/SVN等,结合公司实际发展,认为Git版本控制工具比较适合公司发展需要,重点以实例的形式讲解了Git版本控制工具中的图形化控制工具TortoiseGit的使用。Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
一 研发工作中遇到的问题
由于没有版本控制带来的问题
1 备份多个版本,费空间,费时间;
2难于恢复至以前正确版本;
3 容易引发BUG ,尤其出现BUG时不知道修改哪个版本引出的问题;
4解决代码冲突困难;
5代码管理混乱;
6难于追溯问题代码的修改人和修改时间;
7项目版本发布困难;
8 团队之间难以协同开发;
二 Git版本控制
针对以上问题,开发工作需要引入版本控制系统,在git版本控制工具中,在windows平台下常用的有mygit以及TortoiseGit,本文重点讲解下基于图形界面的TortoiseGit的使用。
Git版本控制工具主要优点:
1 同时支持分布式,离线操作,不需要连接服务器就能实现版本管理,既可以方便个人管理各自的代码,又方便开发团队之间协同管理开发;
2 每日工作备份;
3 异地协同工作;
4 现场版本控制;
5 避免引入辅助目录;
6 一旦修改出现重大失误可以恢复;
7 工作进度随时保存;
8 相对于SVN/CVS等版本管理工具使用更加快捷高效;
9 不仅仅进行代码的版本控制,还可以管理项目文档;
10 GIT版本控制工具开源免费工具;
11 已提供中文图形界面工具包,使用更方便。
三 使用示例简介
1 安装
首先安装msysgit,然后安装TortoiseGit(最新版本TortoiseGit 1.8.8.0),最好按照顺序,不然还的重新设置。安装完后重新启动。
Msysgit下载地址: http://code.google.com/p/msysgit/
TortoiseGit下载地址:http://code.google.com/p/tortoisegit/wiki/Download
2 设置
目前Tortoisegit1.8版本已经支持中文界面操作,目前为了理解方便,以下扔按照英文界面讲解操作。
先到TortoiseGit 程序组中调用Settings 进行设置.
首先需要设置的是用户信息, 没有用户信息, 无法完成其他操作.
在定制时要注意, 在Set Extend Menu Item 时, 勾选的选项是不显示的选项.
隐藏的菜单在文件夹中按右键时同时按下Shift 就能显示出来.
在External Programs 中, 还可以设置比较工具等, 我设置了WinMerge 为比较
工具.
4日常用法
(1) 创建新库
在文件夹中按右键, 选择Git Create repositoryhere 就可以创建库了.
在出现的窗口中, 不勾选选项, 直接按OK
在目录中就会出现一个名为.git 的隐藏文件夹, 所有库的相关内容都会
存在这个文件夹中. 以后不管这个项目添加多少个文件夹, 整个库只会有这
一个管理文件夹, 这和CVS 和SVN 有较大差异.
(2) 添加文件及文件夹
在文件夹中按右键, 选Git Commit ->“master”…
接着填写Message, 勾选Whole Project 选项, 这样Commit 的时候可以将整个项目的信息全部Commit 上去, 可以实现不需要打Tag就能Checkout 出每次Commit 的内容.接着修改foo1.txt, 再创建一个文件夹dir1, 并且放置一个foo2.txt 在dir1 目录中, 再次commit 时, 就可以将dir1 和foo2.txt一起加入了.
(3) 创建分支
在目录中选择TortoiseGit 再选Create Branch…就可以创建分支了.
勾选Switch to new branch, 就可以跳转到建立好的分支上.
添加一个foo3.txt 后, commit 修改.接着通过Switch/Checkout….可以切换回master 分支
再创建一个Branch2, 在Branch2 中添加foo4.txt. 下面就可以看版本发展的
情况了.
(4) 看分支情况及修改log
通过选择Show log, 可以看分支情况和修改log
勾选All Branches 可以看到所有分支的情况.在Message 列中, 绿色的是分支, 红色的是当前工作分支.
(5) 比较版本差异
通过按Shift 和鼠标左键, 可以选中两个版本, 接着再按鼠标右键, 选中Comparerevisions, 就可以比较两个revision 了.
比较主版本和Branch2, 可以发现是添加了foo4.txt
(6) 合并分支
首先切换到master 分支, 接着选Merge
就可以实现将分支合并到主版本
a) Stash
Git 提供了一个暂存修改的功能, 称为Stash, 在一些程序进行了修改, 但还不想commit 成revision 时, 就可以将这些修改Stash 起来, 等到后面需要时再将它
们Pop 出来.
b) 忽略文件
一些编辑器在修改文件后会产生bak 文件, 一般不希望这些备份文件也加入库中, 可以选中一个.bak 文件, 然后选择Add to ignore list 中的*.bak, 这样bak 文
件以后就不会被commit 了.
忽略的文件是通过在项目的目录中添加一个.gitignore 文件实现的, 因此也要将.gitignore 加入忽略文件列表中.
说明:
常见的图标有
这个文件(夹)很干净,是最新版本文件
这个文件(夹)发生了修改,需要提交
这个文件(夹)要添加进版本库
这个文件(夹)没有在版本库中,需要添加进来(转为上一个图标的状态),或者忽略(转为下一个图标的状态)
这个文件(夹)被忽略,不受版本控制
这个文件(夹)里的内容发生冲突(这是最危险的情况,但是对于个人用户来说,几乎不会出现,出现的情况是两个人同时对一个文件做修改,后提交的人在更新时无法与前者完美融合时,这个不需要深入理解)。
通过这么直观的图标暂时,你就能对自己的工作文件夹了如指掌,那些文件做了修改,当前工作是否需要提交,都一目了然。
5 使用实例
(1) 在当前版本库中引入一个工程MemRepair(vc++6.0),如下图
问号图标表示非版本库内版本,因此需要将其添加到版本库中,右键tortoisegit->add,会弹出框,如下图
全选所有,点击确定,即可把项目全部添加到版本库中,如下图所示
点击Commit即可提交成功。
(2)按Git Commit -> “master”是将所选文件夹内容提交到用于汇总的库上。
点击OK,完成如下图
此时图标变为,表示该工程已经正常纳入版本控制
(2) 修改工程代码
可以看到工程被修改的文件的图标,变为红色,如下图MemFinder.h图标
右键MemFinder.h图标,
点击Diff,可以进行版本间的代码比较,如下图
通过点击右键TortoiseGit->Show Log可以查看每次提交的记录,并可以选择不同记录版本,进行版本比较
(3) 工程代码添加新类CMNewClass,然后右键TortoiseGit->add,将新文件添加到版本库中。完成后如下图所示
(4) 其他使用简介,Pull可以从远程服务器上获取更新,Push将本地改变上传到远程。异地代码备份,也可是实现代码的集中管理。
(5) 创建分支,多版本同步开发
在目录中选择TortoiseGit 再选Create Branch…就可以创建分支了,
勾选Switch to new branch, 就可以跳转到建立好的分支上
例子3
同样可以对word等文档进行版本管理,Message表示每次修改提交的修改日志
右键tortoiseGit->Show Log
可以进行版本比较
如下图所示