我在本地 repo 中添加了一些更改并运行svn diff
,但diff
输出为空。但svn status
将我的文件标记为已修改。这是文件是外部项目,我该如何使用diff
命令?
问问题
5810 次
5 回答
5
这是手册中的引述:
除了svn checkout、svn update、svn switch和svn export命令,它们实际上管理检出外部对象的不相交(或断开连接)子目录,svn status命令还可以识别外部定义。它为不相交的外部子目录显示状态代码 X,然后递归到这些子目录以显示外部项目本身的状态。您可以将--ignore-externals选项传递给这些子命令中的任何一个,以禁用外部定义处理。
从上面可以推断,只有提到的命令支持外部。
我不知道为什么会这样,但我的预感是它相对难以正确设计,并且在功能列表中并不高。
于 2012-07-12T18:52:16.787 回答
3
您可以使用此外壳单线:
svn st -q | grep '^[AM]' | cut -c9- | xargs svn diff
解释:
svn st -q
无需附加行(“安静”)即可输出 SVN 状态。grep '^[AM]'
过滤器添加和修改的文件。cut -c9-
删除元数据并进一步传递路径。xargs svn diff
为每个文件运行svn diff
。
于 2017-04-18T08:06:23.370 回答
1
您需要使用外部程序来执行此操作。我写了这个脚本,它似乎做得很好。
<?php
passthru('svn diff');
exec('svn propget svn:externals',$externals);
foreach($externals as $line) {
list($local, $path) = explode(' ',$line);
passthru('svn diff '.$local);
}
?>
于 2014-06-24T21:13:48.230 回答
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文件情况之间的差异。为了查看与主干上最新修订版的区别:
svn diff -rHEAD address_of_your_file
于 2015-04-16T10:31:36.193 回答
0
如果您事先知道外部,您可以将差异输出连接到一个临时文件中。这是在 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
(为了便于阅读,这被分成单独的行)
于 2021-07-26T02:47:11.433 回答