svn 使用教程之-分支/标记 合并 subeclipse
2010-03-05 09:38
453 查看
分支的基本概念就正如它的名字,
开发的一条线独立于另一条线,
如果回顾历史,
可以发现两条线分享共同的历史,
一个分支总是从一个
备份开始的,
从那里开始,
发展自己独有的历
史(
如下图所示
)
⑴
创建分支
假设目前我们版本库中的项目的布局如下图:
如图所示,我们的项目放在了trunk
(主线)目录,另外还有branch(
分支)
和tags(
标签)
目录,这样的布局是为了更清晰的区别主线、分支和标签三者的位置。
subversion
对分支和标签是通过复制一份最新的版本库的快照来实现的。
开始创建分支:
在我们CheckOut
的主线目录(trunk)
上,右键点击然后选择
“Branch/tag…”
在弹出的窗口中,将To
Url
指向branch
目录并输入分支的具体目录名,这里是mybranch1.0
,我们即将创建的分支便存放于此处,点击OK
。
Update
一下本地的branch
目
录,你就可以看到你刚刚创建的分支“mybranch1.0”
,这样一来我们的分支就创建完成了。
创建分支的最大的目的就是跟主线进行并行开发的时候不影响主
线的开发。
因为你在分支上所做的提交都只存于分支上,主线上的Update
是看不到分支的修改的。如下图所示,trunk
只
能看到r344
的版本,并看不到r343
的
版本。
(什么时候应该使用分支呢?例如你接到了一个任务,完成这个任务需要三四个人的合作,你们之间需要
共享资源,那们就可以创建一个专为这次任务的分支,参与此次任务的人员则在分支上做开发,等完成之后再合并到主线上,才不会出现将实现了一半的不完成功能
也提交到主线上,影响主线的正常工作。又或者自己需要一个较长的开发周期来完成任务,这么长的时间内如果一直没有将资源进行提交,万一丢失了就前功尽弃
了。当然分支不是只用于此类情况,还有其它很多种情况也能使用分支来达到目的。)
使用
分支需要注意,
由于长期的独立开发,可能会在合并回主线时出现较多的冲突。所以在支线上开发间期如
果发现主干有更新,而且这个更新有可能将来跟你产生冲突,那你可以先将主线的内容合并到分支上。已免等到做了大量修改再来更新。(
其实此过程跟分支合并到主线上是一样的操作,只是目的地不同。
)
例如我们在主线上的版本为3
,我们
如何将此版本的信息合并到分支上呢?
Merge…”
。
à
在分支的根目录上右键点击,选择
“TortoiseSVN
在这里我们必需先弄明白一个合并背后的关健概念
合并
的过程中发生的所有事:
首先两个版本库树的比较,然后将区别应用到本地拷贝
.
这个命令是包括三个参数的
:
1.
初始的版本树 2.
最终的版本树 3
一个接收区别的工作拷贝。
弄
明白这些概念之后我们继续往下操作。
在弹出的窗口中,选择主线目录和其
版本号(
初始的版本树)
,再选择主线目录和
最新的版本号(最终的版本树),这里也可以是某一个版本号但应该比初始的版本树的版本号要高,接收区默认为你右键所指的目录,这里是mybranch1.0
。
在
合并之前我们可以通过点击“Unified diff”
,查看两版本树之间所有文件的内容的变化,“diff”
显示出有发生变化的文件列表,“dry run”
能
显示真正合并时的状态信息,但并没有做任何的合并操作。
我们点击“Merge”
。
在点击“Merge”
,
合并后的文件(即对分支上的文件补上了主线上修改的内容),如无冲突则可以在分支上像其它文件一样使用了,如果合并后的内容不满意,可以通过撤销来取消这
次的合并操作,前提是未对合并后的文件做提交操作。
分支合并到主线跟从主线上
合并内容到分支上类似
不同的是
1
、开始的版本库是分支创建的版本
2
、结束的版本库是完成所以开发工作之后的版本
3
、应用的目的是主线目录
关于转换工作拷贝、标签(标签在Subversion
中
跟分支是相同原理的,一个不去做任何的修改的分支就是版本库某一时刻的一个快照,相当于为某一个版本做了一个标签)
====================================================
图文:
首先说下为什么我们需要用到分支-合并。比如项目demo下有两个小组,svn
下有一个
trunk版。由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作【某个模块】,小组2进行新需求的
开发。那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版【主干线】的一个copy版,不过分支也是具有版本控制功能的,而且是和主干
线相互独立的,当然,到最后我们可以通过【合并】功能,将分支合并到trunk上来,从而最后合并为一个项目。
下面是在eclipse下使用subeclipse插件详细使用过程:
首先建立一个工程,名字叫Facebook
1.建立分支,为新的分支指定访问URL:Facebook3[注释不要忘了]
![](http://dl.javaeye.com/upload/attachment/165734/e1e3230b-b8d7-342a-b876-df3cf9fd37d4.jpg)
![](http://dl.javaeye.com/upload/attachment/165736/14c7ed56-b067-3fbb-a334-df64f9f14909.jpg)
![](http://dl.javaeye.com/upload/attachment/165738/d638badf-6495-323e-8c1c-9523c2b57fb4.jpg)
2.建立好分之后,使用“切换”功能切换到分支下进行开发。
![](http://dl.javaeye.com/upload/attachment/165740/d69c8935-42f9-308f-b9ac-66705eec5d8d.jpg)
![](http://dl.javaeye.com/upload/attachment/165742/2728a99a-da56-3c21-9133-f8ca234b2ddb.jpg)
我新建了一个FB3.html的文件并在分支下进行提交。
![](http://dl.javaeye.com/upload/attachment/165744/779bd7bd-d5d2-3ce7-ac11-1d585e06addb.jpg)
![](http://dl.javaeye.com/upload/attachment/165747/5d98cffa-f531-3276-8c41-46514e6fa064.jpg)
3.切换回trunk版【即URL为Facebook的版本】
![](http://dl.javaeye.com/upload/attachment/165750/2825a3df-7cbd-3656-97b7-c33f4a936670.jpg)
你会发现trunk版里并没有出现我们刚刚提交的FB3.html,因为FB3.html是属于分支的,接下来我们要做的就是“合并”,通过合
并,我们可以将分支下进行的更改合并到trunk版里。
![](http://dl.javaeye.com/upload/attachment/165752/186a04fe-acdf-328a-85ae-1af6884c805e.jpg)
![](http://dl.javaeye.com/upload/attachment/165754/17f41fcf-5c7b-3225-9b45-e3cd35723b2a.jpg)
下面是合并的主要配置:
起始路径:trunk版的路径【若需要把trunk版的改动合并到分支则相反】
目标路径:从哪里获取改动【这里是分支路径】
你可以使用指定的版本号,这里采用最新修订版。
![](http://dl.javaeye.com/upload/attachment/165756/c069cc72-88ff-30d5-b134-4de364d5b5e7.jpg)
4.点击合并,你会发现trunk版下新增了一个文件FB3.html
这样我们就将分支下所做的改动合并到了trunk版里。
![](http://dl.javaeye.com/upload/attachment/165758/1182f818-c7ae-31c4-b898-272a3d6fb531.jpg)
值得注意的是:
1.在建立分支的时候最好添加注释。
2.进行合并前最好保证两个版本都是干净的【即没有未提交或者冲突的文件存在】
3.合并时的目标路径:需要把谁的改动合并到其他版本就填谁的URL。
整个过程的SVN
命令行输出如下:
Xml代
码
copy -rHEAD svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook3
propset subclipse:tags "1538,Facebook2,/Facebook2,branch
1540,Facebook3,/Facebook3,branch" E:/myeclipse
/workspace/Facebook
switch svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook3 E:/myeclipse
/workspace/Facebook -rHEAD
At revision 1541.
add -N E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
A E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
commit -m "" E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Adding E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Transmitting file data ...
Committed revision 1542.
switch svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook E:/myeclipse
/workspace/Facebook -rHEAD
D E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Updated to revision 1542.
===== File Statistics:
=====
Deleted: 1
merge svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook@HEAD svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook3@HEAD E:/myeclipse
/workspace/Facebook
A E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Merge complete.
===== File Statistics:
=====
Added: 1
希望本文能有所帮助。
其他参考资料:
http://www.javaeye.com/wiki/subclipse/1626-subclipse-getting-started-guide-and-reference-c
开发的一条线独立于另一条线,
如果回顾历史,
可以发现两条线分享共同的历史,
一个分支总是从一个
备份开始的,
从那里开始,
发展自己独有的历
史(
如下图所示
)
⑴
创建分支
假设目前我们版本库中的项目的布局如下图:
如图所示,我们的项目放在了trunk
(主线)目录,另外还有branch(
分支)
和tags(
标签)
目录,这样的布局是为了更清晰的区别主线、分支和标签三者的位置。
subversion
对分支和标签是通过复制一份最新的版本库的快照来实现的。
开始创建分支:
在我们CheckOut
的主线目录(trunk)
上,右键点击然后选择
“Branch/tag…”
在弹出的窗口中,将To
Url
指向branch
目录并输入分支的具体目录名,这里是mybranch1.0
,我们即将创建的分支便存放于此处,点击OK
。
Update
一下本地的branch
目
录,你就可以看到你刚刚创建的分支“mybranch1.0”
,这样一来我们的分支就创建完成了。
创建分支的最大的目的就是跟主线进行并行开发的时候不影响主
线的开发。
因为你在分支上所做的提交都只存于分支上,主线上的Update
是看不到分支的修改的。如下图所示,trunk
只
能看到r344
的版本,并看不到r343
的
版本。
(什么时候应该使用分支呢?例如你接到了一个任务,完成这个任务需要三四个人的合作,你们之间需要
共享资源,那们就可以创建一个专为这次任务的分支,参与此次任务的人员则在分支上做开发,等完成之后再合并到主线上,才不会出现将实现了一半的不完成功能
也提交到主线上,影响主线的正常工作。又或者自己需要一个较长的开发周期来完成任务,这么长的时间内如果一直没有将资源进行提交,万一丢失了就前功尽弃
了。当然分支不是只用于此类情况,还有其它很多种情况也能使用分支来达到目的。)
使用
分支需要注意,
由于长期的独立开发,可能会在合并回主线时出现较多的冲突。所以在支线上开发间期如
果发现主干有更新,而且这个更新有可能将来跟你产生冲突,那你可以先将主线的内容合并到分支上。已免等到做了大量修改再来更新。(
其实此过程跟分支合并到主线上是一样的操作,只是目的地不同。
)
例如我们在主线上的版本为3
,我们
如何将此版本的信息合并到分支上呢?
Merge…”
。
à
在分支的根目录上右键点击,选择
“TortoiseSVN
在这里我们必需先弄明白一个合并背后的关健概念
合并
的过程中发生的所有事:
首先两个版本库树的比较,然后将区别应用到本地拷贝
.
这个命令是包括三个参数的
:
1.
初始的版本树 2.
最终的版本树 3
一个接收区别的工作拷贝。
弄
明白这些概念之后我们继续往下操作。
在弹出的窗口中,选择主线目录和其
版本号(
初始的版本树)
,再选择主线目录和
最新的版本号(最终的版本树),这里也可以是某一个版本号但应该比初始的版本树的版本号要高,接收区默认为你右键所指的目录,这里是mybranch1.0
。
在
合并之前我们可以通过点击“Unified diff”
,查看两版本树之间所有文件的内容的变化,“diff”
显示出有发生变化的文件列表,“dry run”
能
显示真正合并时的状态信息,但并没有做任何的合并操作。
我们点击“Merge”
。
在点击“Merge”
,
合并后的文件(即对分支上的文件补上了主线上修改的内容),如无冲突则可以在分支上像其它文件一样使用了,如果合并后的内容不满意,可以通过撤销来取消这
次的合并操作,前提是未对合并后的文件做提交操作。
分支合并到主线跟从主线上
合并内容到分支上类似
不同的是
1
、开始的版本库是分支创建的版本
2
、结束的版本库是完成所以开发工作之后的版本
3
、应用的目的是主线目录
关于转换工作拷贝、标签(标签在Subversion
中
跟分支是相同原理的,一个不去做任何的修改的分支就是版本库某一时刻的一个快照,相当于为某一个版本做了一个标签)
====================================================
图文:
首先说下为什么我们需要用到分支-合并。比如项目demo下有两个小组,svn
下有一个
trunk版。由于客户需求突然变化,导致项目需要做较大改动,此时项目组决定由小组1继续完成原来正进行到一半的工作【某个模块】,小组2进行新需求的
开发。那么此时,我们就可以为小组2建立一个分支,分支其实就是trunk版【主干线】的一个copy版,不过分支也是具有版本控制功能的,而且是和主干
线相互独立的,当然,到最后我们可以通过【合并】功能,将分支合并到trunk上来,从而最后合并为一个项目。
下面是在eclipse下使用subeclipse插件详细使用过程:
首先建立一个工程,名字叫Facebook
1.建立分支,为新的分支指定访问URL:Facebook3[注释不要忘了]
![](http://dl.javaeye.com/upload/attachment/165734/e1e3230b-b8d7-342a-b876-df3cf9fd37d4.jpg)
![](http://dl.javaeye.com/upload/attachment/165736/14c7ed56-b067-3fbb-a334-df64f9f14909.jpg)
![](http://dl.javaeye.com/upload/attachment/165738/d638badf-6495-323e-8c1c-9523c2b57fb4.jpg)
2.建立好分之后,使用“切换”功能切换到分支下进行开发。
![](http://dl.javaeye.com/upload/attachment/165740/d69c8935-42f9-308f-b9ac-66705eec5d8d.jpg)
![](http://dl.javaeye.com/upload/attachment/165742/2728a99a-da56-3c21-9133-f8ca234b2ddb.jpg)
我新建了一个FB3.html的文件并在分支下进行提交。
![](http://dl.javaeye.com/upload/attachment/165744/779bd7bd-d5d2-3ce7-ac11-1d585e06addb.jpg)
![](http://dl.javaeye.com/upload/attachment/165747/5d98cffa-f531-3276-8c41-46514e6fa064.jpg)
3.切换回trunk版【即URL为Facebook的版本】
![](http://dl.javaeye.com/upload/attachment/165750/2825a3df-7cbd-3656-97b7-c33f4a936670.jpg)
你会发现trunk版里并没有出现我们刚刚提交的FB3.html,因为FB3.html是属于分支的,接下来我们要做的就是“合并”,通过合
并,我们可以将分支下进行的更改合并到trunk版里。
![](http://dl.javaeye.com/upload/attachment/165752/186a04fe-acdf-328a-85ae-1af6884c805e.jpg)
![](http://dl.javaeye.com/upload/attachment/165754/17f41fcf-5c7b-3225-9b45-e3cd35723b2a.jpg)
下面是合并的主要配置:
起始路径:trunk版的路径【若需要把trunk版的改动合并到分支则相反】
目标路径:从哪里获取改动【这里是分支路径】
你可以使用指定的版本号,这里采用最新修订版。
![](http://dl.javaeye.com/upload/attachment/165756/c069cc72-88ff-30d5-b134-4de364d5b5e7.jpg)
4.点击合并,你会发现trunk版下新增了一个文件FB3.html
这样我们就将分支下所做的改动合并到了trunk版里。
![](http://dl.javaeye.com/upload/attachment/165758/1182f818-c7ae-31c4-b898-272a3d6fb531.jpg)
值得注意的是:
1.在建立分支的时候最好添加注释。
2.进行合并前最好保证两个版本都是干净的【即没有未提交或者冲突的文件存在】
3.合并时的目标路径:需要把谁的改动合并到其他版本就填谁的URL。
整个过程的SVN
命令行输出如下:
Xml代
码
copy -rHEAD svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook3
propset subclipse:tags "1538,Facebook2,/Facebook2,branch
1540,Facebook3,/Facebook3,branch" E:/myeclipse
/workspace/Facebook
switch svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook3 E:/myeclipse
/workspace/Facebook -rHEAD
At revision 1541.
add -N E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
A E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
commit -m "" E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Adding E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Transmitting file data ...
Committed revision 1542.
switch svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook E:/myeclipse
/workspace/Facebook -rHEAD
D E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Updated to revision 1542.
===== File Statistics:
=====
Deleted: 1
merge svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook@HEAD svn
://192.168.1.192/placii/staggingarea/xiangqi/Facebook3@HEAD E:/myeclipse
/workspace/Facebook
A E:/myeclipse
/workspace/Facebook/WebRoot/FB3.html
Merge complete.
===== File Statistics:
=====
Added: 1
copy -rHEAD svn ://192.168.1.192/placii/staggingarea/xiangqi/Facebook svn ://192.168.1.192/placii/staggingarea/xiangqi/Facebook3 propset subclipse:tags "1538,Facebook2,/Facebook2,branch 1540,Facebook3,/Facebook3,branch" E:/myeclipse /workspace/Facebook switch svn ://192.168.1.192/placii/staggingarea/xiangqi/Facebook3 E:/myeclipse /workspace/Facebook -rHEAD At revision 1541. add -N E:/myeclipse /workspace/Facebook/WebRoot/FB3.html A E:/myeclipse /workspace/Facebook/WebRoot/FB3.html commit -m "" E:/myeclipse /workspace/Facebook/WebRoot/FB3.html Adding E:/myeclipse /workspace/Facebook/WebRoot/FB3.html Transmitting file data ... Committed revision 1542. switch svn ://192.168.1.192/placii/staggingarea/xiangqi/Facebook E:/myeclipse /workspace/Facebook -rHEAD D E:/myeclipse /workspace/Facebook/WebRoot/FB3.html Updated to revision 1542. ===== File Statistics: ===== Deleted: 1 merge svn ://192.168.1.192/placii/staggingarea/xiangqi/Facebook@HEAD svn ://192.168.1.192/placii/staggingarea/xiangqi/Facebook3@HEAD E:/myeclipse /workspace/Facebook A E:/myeclipse /workspace/Facebook/WebRoot/FB3.html Merge complete. ===== File Statistics: ===== Added: 1
希望本文能有所帮助。
其他参考资料:
http://www.javaeye.com/wiki/subclipse/1626-subclipse-getting-started-guide-and-reference-c
相关文章推荐
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并 subeclipse (转)
- SVN使用教程之-分支/标记 合并 subeclipse
- SVN使用教程之-分支/标记 合并