SVN diff 命令的结果不一致
Inconsistent result of SVN diff command
问题:与在单个文件上执行相比,在整个存储库上执行时,svn diff
命令似乎不一致。
一个例子:考虑 Apache Tomcat 源代码的 r542208 提交。
svn log -v -r r542208 http://svn.apache.org/repos/asf/
结果:
------------------------------------------------------------------------
r542208 | fhanik | 2007-05-28 13:39:15 +0200 (H, 28 máj. 2007) | 2 lines
Changed paths:
M /tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java
M /tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
M /tomcat/trunk/java/org/apache/catalina/connector/Request.java
M /tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
M /tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
Implement setTimeout using an Action instead of an attribute
------------------------------------------------------------------------
现在让我们考虑源文件/tomcat/trunk/java/org/apache/catalina/connector/Request.java
。执行存储库范围的差异提供了一些结果。
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat
结果的Request.java
相关部分如下:
===================================================================
--- trunk/java/org/apache/catalina/connector/Request.java (revision 542207)
+++ trunk/java/org/apache/catalina/connector/Request.java (revision 542208)
@@ -2259,6 +2259,9 @@
// ------------------------------------------------------ Protected Methods
+ protected void action(ActionCode actionCode, Object param) {
+ coyoteRequest.action(actionCode,param);
+ }
protected Session doGetSession(boolean create) {
(结果还有其他部分。)
但是如果我们只对该文件执行 diff 命令,结果将是空的。
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java
我希望得到与上面引用的相同的结果。
同样奇怪的是,在列出该版本的源文件时,上面指出的3个新行丢失了,但是上面和下面的行存在。
问题:什么会导致这种奇怪的行为?是否有任何设置将 SVN 的基础映射到其他目录(例如分支)?或者以后的目录重命名可能会导致此问题?
唉,你成了"Peg Revision Fallacy"的受害者。在其历史上的某个时间,文件 Request.java
被另一个同名文件替换。因此,您需要确保在查询存储库时还指定了正确的 peg revision,这是通过将 @revision
附加到相关路径来完成的。因此,以下命令不会产生任何结果(正如您所报告的)
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java
但如果您添加正确的挂钩修订,您将看到预期的变化:
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java@542207
删除原始 Request.java
的修订版是 573772
,其中整个存储库树被删除并被另一个替换。可以在 http://svnbook.red-bean.com/en/1.8/svn.advanced.pegrevs.html.
找到更多信息
问题:与在单个文件上执行相比,在整个存储库上执行时,svn diff
命令似乎不一致。
一个例子:考虑 Apache Tomcat 源代码的 r542208 提交。
svn log -v -r r542208 http://svn.apache.org/repos/asf/
结果:
------------------------------------------------------------------------
r542208 | fhanik | 2007-05-28 13:39:15 +0200 (H, 28 máj. 2007) | 2 lines
Changed paths:
M /tomcat/trunk/java/org/apache/catalina/connector/CometEventImpl.java
M /tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
M /tomcat/trunk/java/org/apache/catalina/connector/Request.java
M /tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
M /tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
Implement setTimeout using an Action instead of an attribute
------------------------------------------------------------------------
现在让我们考虑源文件/tomcat/trunk/java/org/apache/catalina/connector/Request.java
。执行存储库范围的差异提供了一些结果。
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat
结果的Request.java
相关部分如下:
===================================================================
--- trunk/java/org/apache/catalina/connector/Request.java (revision 542207)
+++ trunk/java/org/apache/catalina/connector/Request.java (revision 542208)
@@ -2259,6 +2259,9 @@
// ------------------------------------------------------ Protected Methods
+ protected void action(ActionCode actionCode, Object param) {
+ coyoteRequest.action(actionCode,param);
+ }
protected Session doGetSession(boolean create) {
(结果还有其他部分。)
但是如果我们只对该文件执行 diff 命令,结果将是空的。
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java
我希望得到与上面引用的相同的结果。
同样奇怪的是,在列出该版本的源文件时,上面指出的3个新行丢失了,但是上面和下面的行存在。
问题:什么会导致这种奇怪的行为?是否有任何设置将 SVN 的基础映射到其他目录(例如分支)?或者以后的目录重命名可能会导致此问题?
唉,你成了"Peg Revision Fallacy"的受害者。在其历史上的某个时间,文件 Request.java
被另一个同名文件替换。因此,您需要确保在查询存储库时还指定了正确的 peg revision,这是通过将 @revision
附加到相关路径来完成的。因此,以下命令不会产生任何结果(正如您所报告的)
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java
但如果您添加正确的挂钩修订,您将看到预期的变化:
svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java@542207
删除原始 Request.java
的修订版是 573772
,其中整个存储库树被删除并被另一个替换。可以在 http://svnbook.red-bean.com/en/1.8/svn.advanced.pegrevs.html.