版本管理之SVN实践教程:基础篇(5):提交/解决冲突/回退/确认

版权声明:本文为博主原创文章,未经博主允许欢迎转载,但请注明出处。 https://blog.csdn.net/liumiaocn/article/details/81942127

这里写图片描述
这篇文章介绍一下团队开发时经常会碰到的svn的冲突产生的原因以及回退或者解决冲突的方式。

冲突产生的原因

多个团队开发成员对同一文件进行了互斥性的修改经常是冲突产生的原因,比如两个开发成员对同一个文件的同一行进行了不同的修改,这种情况就会导致冲突的产生。

模拟冲突

使用如下方式模拟项目中实际的冲突

开发用户 分支 修改文件 修改内容
devuser1 trunk feature_script.sh 添加added by devuser1
devuser2 trunk feature_script.sh 添加added by devuser2

devuser1和devuser2同时checkout

devuser1:

[root@platform trunk]# ls
feature_script.sh  trunk-file
[root@platform trunk]#

devuser2:

[root@platform test]# svn co svn://192.168.163.129:3690/demo-repo/trunk --username devuser2 --password devuser2pw

-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:

   <svn://192.168.163.129:3690> 4fdba69f-3632-49f7-b5ba-d0491223c588

can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
A    trunk/feature_script.sh
A    trunk/trunk-file
 U   trunk
Checked out revision 8.
[root@platform test]# cd trunk/
[root@platform trunk]# ls
feature_script.sh  trunk-file
[root@platform trunk]# cat feature_script.sh 
[root@platform trunk]#

devuser1进行修改并提交

[root@platform trunk]# ls
feature_script.sh  trunk-file
[root@platform trunk]# vi feature_script.sh 
[root@platform trunk]# cat feature_script.sh 
added by devuser1
[root@platform trunk]# svn diff
Index: feature_script.sh
===================================================================
--- feature_script.sh   (revision 8)
+++ feature_script.sh   (working copy)
@@ -0,0 +1 @@
+added by devuser1
[root@platform trunk]# 
[root@platform trunk]# svn commit -m "add info by devuser1"
Sending        feature_script.sh
Transmitting file data .
Committed revision 9.
[root@platform trunk]#

devuser2进行修改并提交

[root@platform trunk]# cat feature_script.sh 
[root@platform trunk]# vi feature_script.sh 
[root@platform trunk]# cat feature_script.sh 
added by devuser2
[root@platform trunk]# svn diff
Index: feature_script.sh
===================================================================
--- feature_script.sh   (revision 8)
+++ feature_script.sh   (working copy)
@@ -0,0 +1 @@
+added by devuser2
[root@platform trunk]# svn commit -m "added by devuser2"
Sending        feature_script.sh
Transmitting file data .svn: E160028: Commit failed (details follow):
svn: E160028: File '/trunk/feature_script.sh' is out of date
[root@platform trunk]# svn update
Updating '.':
Conflict discovered in '/tmp/test/trunk/feature_script.sh'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: 

从上文提示的信息可以看到在svn commit的时候由于冲突(devuser2也试图在第一行添加一行信息,但是内容不同,由于devuser1已经checkin,所以此处提示冲突产生)

解决冲突

这种情况下,devuser1和devuser2讨论后认为两者的信息合并后才是正确的预期,于是devuser1使用df进行确认后使用r进行直接合并,但是根git一样需要手工处理

Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: df
--- /tmp/test/trunk/.svn/pristine/da/da39a3ee5e6b4b0d3255bfef95601890afd80709.svn-base  Sun Aug 26 14:16:55 2018
+++ /tmp/test/trunk/.svn/tmp/feature_script.sh.tmp  Sun Aug 26 14:20:15 2018
@@ -0,0 +1,5 @@
+<<<<<<< .mine
+added by devuser2
+=======
+added by devuser1
+>>>>>>> .r9
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: r
G    feature_script.sh
Updated to revision 9.
[root@platform trunk]# cat feature_script.sh 
<<<<<<< .mine
added by devuser2
=======
added by devuser1
>>>>>>> .r9
[root@platform trunk]#

手工合并之后,进行svn commit提交

[root@platform trunk]# vi feature_script.sh 
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1
[root@platform trunk]# svn commit -m "merge for devuser1 & devouser2"
Sending        feature_script.sh
Transmitting file data .
Committed revision 10.
[root@platform trunk]# 

devuser2进行更新

devuser2进行更新,也得到了同样的结果

[root@platform trunk]# svn update
Updating '.':
U    feature_script.sh
Updated to revision 10.
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1
[root@platform trunk]#

回退

现在devuser1和devuser2的feature_script.sh 都是相同的信息了

[root@platform trunk]# ls
feature_script.sh  trunk-file
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1
[root@platform trunk]# 

devuser2修正并提交

添加新的一行,并使用snv diff确认修改内容

[root@platform trunk]# vi feature_script.sh 
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1

devuser2 added another line
[root@platform trunk]# svn diff
Index: feature_script.sh
===================================================================
--- feature_script.sh   (revision 10)
+++ feature_script.sh   (working copy)
@@ -1,2 +1,4 @@
 added by devuser2
 added by devuser1
+
+devuser2 added another line
[root@platform trunk]#

提交并使用svn log确认修改日志

[root@platform trunk]# svn commit -m "add another line"
Sending        feature_script.sh
Transmitting file data .
Committed revision 11.
[root@platform trunk]# svn update
Updating '.':
At revision 11.
[root@platform trunk]# svn log
------------------------------------------------------------------------
r11 | devuser2 | 2018-08-26 15:02:51 -0400 (Sun, 26 Aug 2018) | 1 line

add another line
------------------------------------------------------------------------
r10 | devuser2 | 2018-08-26 14:54:01 -0400 (Sun, 26 Aug 2018) | 1 line

merge for devuser1 & devouser2
------------------------------------------------------------------------
r9 | devuser2 | 2018-08-26 14:38:07 -0400 (Sun, 26 Aug 2018) | 1 line

add info by devuser1
------------------------------------------------------------------------
r7 | devuser1 | 2018-08-26 14:13:38 -0400 (Sun, 26 Aug 2018) | 1 line

commit for merge
------------------------------------------------------------------------
r3 | devuser1 | 2018-08-26 13:45:24 -0400 (Sun, 26 Aug 2018) | 1 line

add file in trunk
------------------------------------------------------------------------
r2 | devuser1 | 2018-08-26 13:39:18 -0400 (Sun, 26 Aug 2018) | 1 line

branches init
------------------------------------------------------------------------
[root@platform trunk]#

devuser1修改一行内容

为了创造冲突,此时devuser1也修改一行内容

[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1
[root@platform trunk]# vi feature_script.sh 
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1

devuser1 added one line
[root@platform trunk]#

冲突产生

[root@platform trunk]# svn commit -m "devuser1 add one line"
Sending        feature_script.sh
Transmitting file data .svn: E160028: Commit failed (details follow):
svn: E160028: File '/trunk/feature_script.sh' is out of date
[root@platform trunk]#

回退

因为此时尚未提交成功,所以使用revert可进行回退

[root@platform trunk]# ls
feature_script.sh  trunk-file
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1

devuser1 added one line
[root@platform trunk]# svn revert feature_script.sh 
Reverted 'feature_script.sh'
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1
[root@platform trunk]#

所有的根源在于修改之前没有进行update,即未将团队他人的修改即时合并进来,所以回退之后进行svn udpate

[root@platform trunk]# svn update
Updating '.':
U    feature_script.sh
Updated to revision 11.
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1

devuser2 added another line
[root@platform trunk]# 

在此基础上进行修改和commit,则不会再产生冲突了

[root@platform trunk]# vi feature_script.sh 
[root@platform trunk]# cat feature_script.sh 
added by devuser2
added by devuser1

devuser2 added another line
devuser1 added one     line
[root@platform trunk]# svn commit -m "devuser1 added one line"
Sending        feature_script.sh
Transmitting file data .
Committed revision 12.
[root@platform trunk]#

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/81942127
今日推荐