SVN 冲突
本文最后更新于:2024年9月8日 晚上
SVN 冲突
过时的文件
- 在一个相对服务器端版本来说是旧版本的基础上进行了修改的文件,这时候如果提交则会失败!
- 所有过时的文件都必须先执行更新操作,更新后在最新版基础上修改的文件才允许提交。
- 更新完之后,user1对文件的修改也同步到了user2的工作副本,之后user2就可以正常提交了。
冲突的产生
- 从服务器端更新下来的修改和本地的修改在"同文件同位置”不一致,也就是修改了同一行内容。
- 现在两个用户同时修改了同一行,user2先提交了,这时user1更新时发现冲突。
冲突的表现
文件内部
1 2 3 4 5 6 7
| hello world <<<<<<< .mine Thanks ||||||| .r4 ======= 谢谢。 >>>>>>> .r5
|
<<<<<<<
到 |||||||
是本地修改之后的内容
|||||||
到 =======
是修改之前的内容
=======
到 >>>>>>>
是服务器端修改的内容。
目录内部
- 由于发生冲突会产生以下三个文件。
xxx.mine文件
:发生冲突时本地文件内容。
xxx.r[小版本号]文件
:发生冲突前文件内容。
xxx.r[大版本号]文件
:发生冲突时服务器端文件内容。
手动解决冲突
- 删除冲突发生时产生的三个多余文件。
- 删除冲突文件内多余的符号。
- 把文件编辑到满意的状态。
- 提交。
半自动解决冲突
(p)
:推迟,之后手动处理。
(df)
:显示全部差异。
(e)
:编辑。
(m)
:合并。
(s)
:显示全部选项。
- 其他选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| # 跳过此冲突,稍后解决[推迟] (p) - skip this conflict and leave it unresolved [postpone] # 接受整个文件的传入版本[使用版本库里的文件] (tf) - accept incoming version of entire file [theirs-full] # 拒绝此文件的所有传入更改[使用我自己的文件] (mf) - reject all incoming changes for this file [mine-full] # 只接受冲突的传入更改。 (tc) - accept incoming changes only where they conflict [theirs-conflict] # 拒绝冲突的传入更改并接受其余更改。 (mc) - reject incoming changes which conflict and accept the rest [mine-conflict] # 接受工作副本中显示的文件。 (r) - accept the file as it appears in the working copy [working] # 推迟所有剩余冲突。 (q) - postpone all remaining conflicts # 在编辑器中更改合并文件。 (e) - change merged file in an editor [edit] # 显示对合并文件所做的所有更改。 (df) - show all changes made to merged file # 显示所有冲突(忽略合并版本) (dc) - show all conflicts (ignoring merged version) # 使用合并工具解决冲突。 (m) - use merge tool to resolve conflict # 启动外部合并工具以解决冲突[启动] (l) - launch external merge tool to resolve conflict [launch] # 使用内置的合并工具解决冲突。 (i) - use built-in merge tool to resolve conflict
|
- 按下
e
进行编辑页面。
- 之后就是和上面一样的步骤,删除掉特殊符号,然后把文件编辑到满意的状态,之后保存退出。
- 按下
r
标记为已解决,之后就可以再次提交了。
避免冲突
- 尽可能在修改文件前先进行更新操作,尽量在最新版基础上修改文件内容。
- 尽量减少多人修改同一个文件的可能性。
- 加强团队成员之间的沟通。