从svn更新而不自动合并

Nat*_*ons 17 svn tortoisesvn

我的同事对svn更新的工作方式有问题,但我不确定原因,所以这个问题有两个方面.首先,如何以他想要的方式解决他的问题,其次,我是否应该试着让他相信TortoiseSVN现在做事的方式是最好的方式(如果是的话,如何)?

他的理想用例

  1. 右键单击 - > SVN更新
  2. 只要文件在工作副本中没有更改,SVN就会从存储库中提取更改
  3. 如果工作副本和HEAD都发生了变化,他希望在发生任何事情之前得到提示,并自己进行合并(即使这是svn很容易弄明白的情况).

我想这是一个合理的请求,但他不想信任SVN的事实困扰我,虽然它并没有真正影响我或我的工作.他之前使用的是CVS,SVN和ClearCase,他并不擅长版本控制.他声称他之前能够在svn中做到这一点(同时,他也是我多年的大四学生).

Wim*_*nen 17

TortoiseSVN FAQ:" 防止颠覆进行自动合并 ".

编辑:我正在复制常见问题解答中的链接答案,以保护链接腐烂的答案:

有些人不喜欢Subversion在更新时自动将自己的本地工作副本更改合并到其他人的更改.以下是如何强制这些文件进入冲突状态,以便您可以方便地手动合并.

在TortoiseSVN-> Settings-> Subversion配置文件中,单击编辑按钮.[helpers]通过添加更改部分

diff-cmd = "C:\\false.bat"
diff3-cmd = "C:\\false.bat" 
Run Code Online (Sandbox Code Playgroud)

(注意双反斜杠)创建C:\false.bat包含两行的文件

@type %9
@exit 1 
Run Code Online (Sandbox Code Playgroud)

这有效地使每次自动合并失败,从而迫使文件发生冲突.

好奇的原因type %9 是diff3-cmd将合并的输出发送到stdout.然后Subversion接受此操作并使用合并结果覆盖您的本地文件.添加此行可避免获取空本地文件.


Dar*_*ryl 8

由于您的同事使用自动合并令人不舒服,我对不进行自动合并的同事感到不舒服.在我看来,这是错误的心态.当你不接受所有你是选择存储库的变化未提交代码,但在某种程度上,它没有这样做感觉像未犯.这是一种易于引入和/或重新引入错误的思维方式.

当您在允许之前查看合并时,您正在考虑将允许哪些更改进入您的代码库,而实际上您正在决定要从代码库中删除哪些已提交代码.这是一个微妙但重要的区别.

当然,需要协调更改,当然可能需要撤消或修改已提交的代码.如果没有接受其他人的提交,就会导致人们撤销提交而不承认你正在做的事情.

  • 虽然我同意你的观点,但我认为他们并没有说出完整的故事.我个人想要仔细检查合并文件的原因是a).它(通常)不经常发生,如果你经常更新/提交,和b).我已经看到太多自动SVN合并没有预期结果的情况.我说的是同事和我都编辑过某些行的情况,而不是选择其中一行,而是将它们添加到彼此之下.不用说**应该**导致冲突,并且当它没有时会引起一些微妙的错误. (5认同)

use*_*559 1

也许你可以说服他让 svn 进行更改,并让他在签入之前检查它们?

我发现命令“svn diff --diff-cmd=kdiff3”对于这种情况非常有用。尽管无可否认,这是 Linux,并且您的语法会随 TortiseSVN 的不同而变化。