当文件被标记为“计划与提交历史”时,如何使用svn diff?

18
我在我的工作目录中合并到主干的分支上有更改。Svn stat显示了正确的更改文件列表。然而,“svn stat”输出包括每个新添加到分支的文件历史记录中的“+”。当我运行“svn diff”时,具有“+”的添加文件不包括在补丁输出中。这似乎是有问题的。如果一个文件被标记为已添加,则其所有内容都应该在diff输出中。我尝试传递--notice-ancestry。补丁输出没有变化。我能找到与同样问题最接近的是关于复制/移动文件的这些注释。有人知道如何让SVN在diff输出中包括这些文件吗?我刚刚尝试了这个questions答案建议的外部diff程序,但对我没有用。
4个回答

17

当版本1.7发布时,svn diff将拥有一个--show-copies-as-adds的选项来实现这个功能。这表明版本1.6及之前的版本没有这个能力。


15

svn 状态 命令输出中的加号表示该文件已被“计划在提交时添加进版本库历史记录”。这意味着该文件实际上并不是新文件,而是版本库中某个文件的直接后代。

这意味着在 svn diff 中应该没有输出,因为实际上该文件没有更改。如果您对该文件进行了一些本地修改,则这些修改将出现在 svn diff 输出中。


1
我怀疑这个加号。但是,我如何使用diff创建一个差异,其中包含所有更改(从主干视图中看到的)以提交给项目维护者? - James A Wilson
@James:由于技术上svn复制或重命名无法用标准的diff格式表示(并保留历史记录),因此使用历史记录可能会很困难。您可以删除该文件的历史记录(cp file file.bak; svn revert file; rm file; mv file.bak file; svn add file),然后您将在svn diff中获得差异,但是您不会保留历史记录,这将非常遗憾。您可能需要包括手动执行转换的说明。 - Avi
简而言之,对这些“历史计划”文件进行一些本地更改即可完成。非常感谢您提供的快速解决方案。但仍然只显示局部修改而不是整个文件。 - Saurabh Bayani

0
合并两个分支,比如将A2分支与A1分支合并,并在A1分支中添加了一些新文件并提交。合并后,新文件显示为已添加到版本控制中,带有“+”符号,所以需要删除A2分支中新添加的文件,然后再次添加。现在将其添加到版本控制中,然后可以发起审查。

0
如果你执行了 "svn mv fileA fileB" 命令,那么在文件B旁边会出现一个加号。我认为这个加号表示实际的文件内容没有改变,因此它不会在svn diff中显示出来。在这种情况下,只是文件名发生了改变。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接