2015-06-02 64 views
3

問題:與單個文件上的執行相比,svn diff命令在整個存儲庫上執行時似乎不一致。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。執行一個版本庫diff diff會提供一些結果。

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的基礎映射到其他目錄(例如分支)?或者也許以後的目錄重命名可能會導致此問題?

回答

4

唉,你成了「Peg Revision Fallacy」的受害者。在其歷史上的某個時間,文件Request.java被另一個同名的文件替換。因此,在查詢存儲庫時,您需要確保您還指定了正確的,這通過將@revision添加到相關路徑中完成。因此,以下命令將產生什麼(如你報)

svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/Request.java 

,但如果你添加正確的peg修訂版本,你會看到預期的變化:

svn diff -r r542207:r542208 http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/catalina/connector/[email protected] 

修訂,其中原Request.java被刪除的是573772,其中整個存儲庫樹被刪除並被另一個替換。更多信息可在http://svnbook.red-bean.com/en/1.8/svn.advanced.pegrevs.html找到。

+0

太好了,解決了這個問題!非常感謝! (由於名聲不多,我無法投票。) –