SVN diff 命令结果不一致

Csa*_*agó 4 svn diff

问题svn diff与在单个文件上执行相比,在整个存储库上执行时该命令似乎不一致。

\n\n

一个例子:考虑Apache Tomcat 源代码的r542208提交。

\n\n

svn log -v -r r542208 http://svn.apache.org/repos/asf/

\n\n

结果:

\n\n
------------------------------------------------------------------------\nr542208 | fhanik | 2007-05-28 13:39:15 +0200 (H, 28 m\xc3\xa1j. 2007) | 2 lines\nChanged paths:\n   M /tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java\n   M /tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java\n   M /tomcat/trunk/java/org/apache/catalina/connector/Request.java\n   M /tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java\n   M /tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java\n\nImplement setTimeout using an Action instead of an attribute\n\n------------------------------------------------------------------------\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在让我们考虑源文件/tomcat/trunk/java/org/apache/catalina/connector/Request.java。执行存储库范围的差异会提供一些结果。

\n\n
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果的相关部分Request.java如下:

\n\n
===================================================================\n--- trunk/java/org/apache/catalina/connector/Request.java       (revision 542207)\n+++ trunk/java/org/apache/catalina/connector/Request.java       (revision 542208)\n@@ -2259,6 +2259,9 @@\n\n     // ------------------------------------------------------ Protected Methods\n\n+    protected void action(ActionCode actionCode, Object param) {\n+        coyoteRequest.action(actionCode,param);\n+    }\n\n     protected Session doGetSession(boolean create) {\n
Run Code Online (Sandbox Code Playgroud)\n\n

(结果还有其他部分。)

\n\n

但如果我们只对该文件执行 diff 命令,结果将为空。

\n\n
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望得到与上面引用的结果相同的结果。

\n\n

同样奇怪的是,在列出该版本的源文件时,上面指出缺少 3 个新行,但上面和下面的行却存在。

\n\n

问题:什么可能导致这种奇怪的行为?是否有任何设置将 SVN 的基础映射到其他目录(例如分支)?或者稍后的目录重命名可能会导致此问题?

\n

Mic*_*per 5

唉,你成了“挂钩修正谬误”的受害者。在其历史上的某个时候,该文件Request.java被另一个同名文件替换。因此,您需要确保在查询存储库时还指定了正确的挂钩修订版本@revision,这是通过附加到相关路径来完成的。因此,以下命令不会产生任何结果(正如您所报告的)

svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java
Run Code Online (Sandbox Code Playgroud)

但如果您添加正确的挂钩修订版,您将看到预期的更改:

svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java@542207
Run Code Online (Sandbox Code Playgroud)

Request.java删除原始版本的修订版是573772,其中整个存储库树被删除并被另一个存储库树替换。更多信息请访问http://svnbook.red-bean.com/en/1.8/svn.advanced.pegrevs.html