gpt4 book ai didi

svn - 如何查找文件是否曾经存在于 svn-repo 中?

转载 作者:行者123 更新时间:2023-12-04 15:25:44 27 4
gpt4 key购买 nike

由于一些晦涩(但有效)的原因,我需要查明文件是否曾经在我们的存储库中进行过版本控制。

我只找到了一种获取包含目录的日志的迂回方法,然后解析它以删除条目:

svn log -v a/b/|grep "   D .*a/b/c.xml"

它有效,但感觉“不干净”并且有些脆弱。

最佳答案

根据您的问题,您隐含地限定了对已删除文件的请求(因为大概如果它没有被删除,一个简单的目录搜索就会显示它)。 Lazy Badger 的评论很有值(value):在不损失任何准确性的情况下删除限定条件,从而简化命令。我都赞成简化,但考虑到任何问题,我也想考虑以很少的额外成本从解决方案中获得更多 yield 。

因此,从您提出的解决方案开始:

svn log -v a/b/ | grep "   D .*a/b/c.xml"

我会先添加 -q选项,它减少了您无论如何都丢弃的输出:
svn log -v -q a/b/ | grep "   D .*a/b/c.xml"

然后我不仅想知道是否删除了这样的文件,还想知道它何时被删除(即在哪个修订版中)。由于您还隐式地将您的环境限定为 Unix/Linux,这里是一个使用 awk 的解决方案(改编自 blog entry):
svn log -q -v a/b/ | awk '
/^r[0-9]* \|/ { REVISION=$1; }
/ D/ { print REVISION": "$0; }
' | grep " D .*a/b/c.xml"

这是因为 svn log 的格式 –v时的输出使用参数:它报告一个修订版,然后是该修订版中的所有文件。这是一个示例,显示文件 Page.cs 在修订版 10506 中被删除:
r10506 | msorens | 2011-02-14 12:58:56 -0800 (Mon, 14 Feb 2011) | 1 line
Changed paths:
A /Projects/Test/Common
A /Projects/Test/Common/Setup.cs
A /Projects/Test/Common/Utility.cs
D /Projects/Test/Page.cs

上面的 awk 命令以这种格式解析输出,从第一行提取修订号,然后将任何文件标记为已删除(“D”行)。对于 Windows,PowerShell 通过使用 switch 语句提供与 awk 相同的功能和易用性:
$( switch -Regex (svn log -q -v a/b) {
'^(r[0-9]*) \|' { $rev = $Matches[1] }
'^ D\s+(.*)' { "{0,-6} {1}" -f $rev, $Matches[1] }
} ) | Select-String "a/b/c.xml"

但是 TortoiseSVN 有一个更简单的方法——只需打开工作副本根目录上的日志窗口,然后在搜索框中输入文件名。修订列表立即按您键入的内容进行过滤。如果它显示多于一行的输出,则最新的(最上面的)修订版将始终是文件被删除的那个修订版。

关于svn - 如何查找文件是否曾经存在于 svn-repo 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9564332/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com