svn diff不显示修改的外部文件

时间:2012-07-12 13:36:48

标签: svn version-control

我在本地仓库中添加了一些更改并运行svn diff,但diff输出为空。 但是svn status将我的文件标记为已修改。这是文件是外部项目,我如何使用diff命令?

5 个答案:

答案 0 :(得分:4)

以下是the manual的引用:

  

除了 svn checkout svn update svn switch svn export 命令,它们实际管理在检出外部的不相交(或断开连接)子目录中, svn status 命令也识别外部定义。它为不相交的外部子目录显示状态代码X,然后递归到这些子目录以显示外部项目本身的状态。您可以将 - ignore-externals 选项传递给任何这些子命令,以禁用外部定义处理。

可以从上面推断出只有上面提到的命令支持外部。

我不知道为什么会这样,但我的预感是,设计得相对困难并且在功能列表上并不高。

答案 1 :(得分:1)

您需要使用外部程序来执行此操作。我写了这个脚本似乎做得很好。

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

答案 2 :(得分:1)

这是合乎逻辑的,因为 svn status 显示了关于中继的最后修订的状态。这意味着您的本地未更新到主干上的最新修订版。通过获取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 中本地文件与文件情况之间的差异。为了查看关于trunk的最新修订版的不同之处:

svn diff -rHEAD address_of_your_file

答案 3 :(得分:1)

你可以使用这个shell one-liner:

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

答案 4 :(得分:0)

如果您事先知道外部信息,您可以将 diff 输出连接到一个临时文件中。这是在 Windows 上为具有外部的存储库启动 TortoiseSVN 统一差异的单行命令:

svn diff PATH1 > x.txt 
  & svn diff PATH2 >> x.txt 
  & svn diff PATH3 >> x.txt 
  & "c:\Program Files\TortoiseSVN\bin\TortoiseUDiff.exe" x.txt

(为了可读性,这被分成单独的行)