8

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

4

5 回答 5

5

这是手册中的引述:

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

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

我不知道为什么会这样,但我的预感是它相对难以正确设计,并且在功能列表中并不高。

于 2012-07-12T18:52:16.787 回答
3

您可以使用此外壳单线:

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
于 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 回答