菜鸟笔记
提升您的技术认知

svn 解决冲突-ag真人游戏

阅读 : 650

版本冲突原因:

假设 a、b 两个用户都在版本号为 100 的时候,更新了 kingtuns.txt 这个文件,a 用户在修改完成之后提交 kingtuns.txt 到服务器, 这个时候提交成功,这个时候 kingtuns.txt 文件的版本号已经变成 101 了。同时b用户在版本号为 100 的 kingtuns.txt 文件上作修改, 修改完成之后提交到服务器时,由于不是在当前最新的 101 版本上作的修改,所以导致提交失败。

我们已在本地检出 coonote01 库,下面我们将实现版本冲突的解决方法。

我们发现 helloworld.html 文件存在错误,需要修改文件并提交到版本库中。

我们将 helloworld.html 的内容修改为 "helloworld! https://www.coonote.com/"。

root@coonote:~/svn/coonote01/trunk# cat helloworld.html 
helloworld! http://www.coonote.com/

用下面的命令查看更改:

root@coonote:~/svn/coonote01/trunk# svn diff 
index: helloworld.html
===================================================================
--- helloworld.html     (revision 5)
    helloworld.html     (working copy)
@@ -1,2  1 @@
-helloworld! http://www.coonote.com/
 helloworld! http://www.coonote.com/!

尝试使用下面的命令来提交他的更改:

root@coonote:~/svn/coonote01/trunk# svn commit -m "change helloworld.html first"
sending        helloworld.html
transmitting file data .svn: e160028: commit failed (details follow):
svn: e160028: file '/trunk/helloworld.html' is out of date

这时我发现提交失败了。

因为此时,helloworld.html 已经被 user02 修改并提交到了仓库。subversion 不会允许 user01(本例使用的 svn 账号)提交更改,因为 user02 已经修改了仓库,所以我们的工作副本已经失效。

为了避免两人的代码被互相覆盖,subversion 不允许我们进行这样的操作。所以我们在提交更改之前必须先更新工作副本。所以使用 update 命令,如下:

root@coonote:~/svn/coonote01/trunk# svn update
updating '.':
c    helloworld.html
updated to revision 6.
conflict discovered in file 'helloworld.html'.
select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
        (mc) my side of conflict, (tc) their side of conflict,
        (s) show all options: mc
resolved conflicted state of 'helloworld.html'
summary of conflicts:
  text conflicts: 0 remaining (and 1 already resolved)

这边输入"mc",以本地的文件为主。你也可以使用其选项对冲突的文件进行不同的操作。

默认是更新到最新的版本,我们也可以指定更新到哪个版本

svn update -r6

此时工作副本是和仓库已经同步,可以安全地提交更改了

root@coonote:~/svn/coonote01/trunk# svn commit -m "change helloworld.html second"
sending        helloworld.html
transmitting file data .
committed revision 7.
网站地图