2012-07-12 29 views
5

我在本地repo中添加了一些更改並運行svn diff,但diff輸出爲空。 但svn status將我的文件標記爲已修改。這是文件是外部項目,我怎麼能用這個命令使用diff命令?svn diff不顯示修改的外部文件

回答

3

這裏是the manual報價:

除了svn籤SVN更新SVN切換SVN出口命令,它實際上管理脫節(或斷開)子目錄外部檢查被檢出,svn狀態命令也識別外部定義。它爲不相交的外部子目錄顯示狀態碼X,然後遞歸到這些子目錄中以顯示外部項目本身的狀態。您可以將--ignore-externals選項傳遞給任何這些子命令以禁用外部定義處理。

可以從上面推論出只有上述命令支持外部。

我不知道爲什麼會這樣,但我的直覺是設計正確並且在功能列表上並不高。

1

你需要使用外部程序來完成它。我寫了這個腳本,似乎很好地完成了這項工作。

<?php 
passthru('svn diff'); 
exec('svn propget svn:externals',$externals); 
foreach($externals as $line) { 
    list($local, $path) = explode(' ',$line); 
    passthru('svn diff '.$local); 
} 
?> 
1

這是合乎邏輯的,因爲原因是SVN狀態表示相對於軀幹的最後修訂狀態。這意味着您的本地沒有更新到中繼線上的最後一個修訂版本。通過採取SVN信息,你會看到

Path: /home/.... 
Working Copy Root Path: /home/trunk 
URL: https://svn.***.**/trunk 
Repository Root: https://svn.***.**/ 
Repository UUID: 
Revision: **LAST_UPDATED_REVISION_Nr** 

然而,SVN DIFF顯示您LAST_UPDATED_REVISION_Nr本地文件和文件情況之間的差異。爲了看到關於區別的最後修訂主幹:

svn diff -rHEAD address_of_your_file 
1

您可以使用此外殼一行代碼:

svn st -q | grep '^[AM]' | cut -c9- | xargs svn diff 

說明:

  1. svn st -q需要輸出SVN狀態沒有額外的行(「安靜」)。
  2. grep '^[AM]'過濾器添加和修改的文件。
  3. cut -c9-將元數據剪掉並進一步傳遞路徑。
  4. xargs svn diff爲每個文件運行svn diff
相關問題