【发布时间】:2012-02-01 22:59:25
【问题描述】:
如何获取所有超过 x 年的 SVN 分支的列表?
我在 CentOS 上使用 SVN,并且我有 sventon 用于查看所有存储库。
【问题讨论】:
-
出于兴趣:想要 x 年前“诞生”的分支吗?或者您是否在寻找 x 年没有任何活动的分支机构?
标签: svn
如何获取所有超过 x 年的 SVN 分支的列表?
我在 CentOS 上使用 SVN,并且我有 sventon 用于查看所有存储库。
【问题讨论】:
标签: svn
svn help ls如果您将存储库分支根目录的 URL 与详细输出一起使用,您将得到如下内容:
svn ls http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/ --verbose
28 lazybadg фев 22 2011 ./
28 lazybadg фев 22 2011 Leichtbau-Deutsch/
26 lazybadg фев 22 2011 branche-francaise/
25 lazybadg сен 14 2010 i18n/
gawk 中的 3+4+5 字段将为您提供分支的最后更改日期。
svn help log稍微复杂和嘈杂的输出具有一个优点:可读的日期,
svn log http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/ -v -q
------------------------------------------------------------------------
r28 | lazybadger | 2011-02-22 09:24:04 +0600 (Вт, 22 фев 2011)
Changed paths:
M /branches/Leichtbau-Deutsch/Hello.de.txt
------------------------------------------------------------------------
r27 | lazybadger | 2011-02-22 09:21:41 +0600 (Вт, 22 фев 2011)
Changed paths:
A /branches/Leichtbau-Deutsch (from /trunk:26)
------------------------------------------------------------------------
r26 | lazybadger | 2011-02-22 06:49:41 +0600 (Вт, 22 фев 2011)
Changed paths:
A /branches/branche-francaise (from /trunk:25)
M /branches/branche-francaise/Hello.fr.txt
------------------------------------------------------------------------
| grep -v "|"对于排除分隔线,使用,从“更改的路径”文件名中获取受影响的分支,日期从修订日志的第一个字符串开始。
【讨论】:
svn ls ^/branches --verbose
您始终可以使用“--xml”而不是“--verbose”。 “-v”。产生机器可读的输出,而不是由“--verbose”产生的“人类可读的输出”。无需删除分隔线等。使用 xmlstarlet 或使用适当的 XQuery 脚本(Saxon,...)提取您需要的内容。
【讨论】:
结合@Lazy 的答案和this answer 使用命令替换,您可以将它们全部放在一个命令中:
svn ls `svn info | grep '^URL' | awk '{sub(/trunk.*$/, "branches", $NF); print}'` -v
(取决于您的 svn repo 布局,如有必要,请更改。)
【讨论】:
我想出了另一种方法来做到这一点,但您需要 sventon 或其他工具来列出您的 SVN 存储库的所有内容。
第 1 步:从您的 sventon 视图中,复制分支列表。这将包括修订、作者和日期。
第 2 步:打开 Excel 并进行特殊粘贴。
第 3 步:过滤日期列以显示小于 x 年的日期。
结果:所有小于 x 年的分支。这个列表对我做svn delete --targets listofoldbranchnames.txt很有用。
【讨论】: