1.背景介绍
什么是版本控制?
版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。 版本控制透过文档控制(documentation control)记录程序各个模组的改动,并为每次改动编上序号。 用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。 版本控制软件的最高目标,是支持软件公司的配置管理活动,追踪多个版本的开发和维护活动,及时发布软件。
怎样进行版本控制?
使用版本控制软件,常用的如Tortise SVN,GitHub,StartTeam等
Tortise SVN简介
TortoiseSVN是一个非常容易使用版本控制/源代码控制的Windows软件。 它基于Apache ™ Subversion(SVN)® ; TortoiseSVN为Subversion提供了一个非常好用的界面。 并且完全开源,源代码也是免费的。所以如果你愿意,你甚至可以开发你自己的版本。 由于它不是像Visual Studio,Eclipse或其他特定 IDE 的集成,因此可以将其与任何您喜欢的开发工具以及任何类型的文件一起使用。
Tortise SVN特性
使用方便
允许通过在Windows资源管理器中右键拖动文件来移动文件
所有的Subversion协议都被支持
其他特性
最终要的一点是:官方支持中文
SVN名词
SVN目录
trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。 但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯
IDEA上使用svn的一些基本操作
3.常见问题
怎样打tag
怎样merge
怎样回滚
4.解决方案
怎样打tag;
SVN打tag是一个很常用的功能,要谈打tag,还得从SVN官方推荐的目录结构说起。SVN官方推荐在一个版本库的根目录下先建立trunk、branches、tags这三个文件夹,其中trunk是开发主干,存放日常开发的内容;branches存放各分支的内容,比如为不同客户制定的不同版本;tags存放某个版本状态的标签,比如验收测试版、1.0.3版等。branches和tags本质没有区别,都是通过svn copy方式建立的,差异在于通常branches中的内容是需要继续修改或开发的,tags中的内容是存放不再修改的,这一般通过权限设置来解决,tags通常只给管理员开发写权限。我们的项目开发到一个稳定版本都需要打个tag,进行总结与备份
将 master 分支合并到 feature 分支最简单的办法就是用下面这些命令:
git checkout feature
git merge master
或者,你也可以把它们压缩在一行里。
git merge master feature
feature 分支中新的合并提交(merge commit)将两个分支的历史连在了一起。你会得到下面这样的分支结构:
怎样回滚
取消对代码的修改分为两种情况:
第一种情况:改动没有被提交(commit)。
这种情况下,使用svn revert就能取消之前的修改。
svn revert用法如下:
# svn revert [-R] something
其中something可以是(目录或文件的)相对路径也可以是绝对路径。
当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。
在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。
注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。
第二种情况:改动已经被提交(commit)。
这种情况下,用svn merge命令来进行回滚。
回滚的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
假设最新版本号是28。
2、然后找出要回滚的确切版本号:
svn log [something]
假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目
如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]
3、回滚到版本号25:
svn merge -r 28:25 something
为了保险起见,再次确认回滚的结果:
svn diff [something]
发现正确无误,提交。
4、提交回滚:
svn commit -m "Revert revision from r28 to r25,because of ..."
提交后版本变成了29。
将以上操作总结为三条如下:
1. svn update,svn log,找到最新版本(latest revision)
2. 找到自己想要回滚的版本号(rollbak revision)
3. 用svn merge来回滚: svn merge -r : something