我在本地仓库中添加了一些更改并运行svn diff
,但diff
输出为空。
但是svn status
将我的文件标记为已修改。这是文件是外部项目,我如何使用diff
命令?
答案 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
说明:
svn st -q
获取SVN状态的输出而没有其他行(“安静”)。grep '^[AM]'
过滤了添加和修改的文件。cut -c9-
会删除元数据并进一步传递路径。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
(为了可读性,这被分成单独的行)