列出给定SVN修订版中的所有分支/标记

时间:2015-07-07 08:46:43

标签: svn

我有一个包含大量分支和标记的大型SVN存储库。

是否可以列出特定版本的所有分支和标签?

2 个答案:

答案 0 :(得分:0)

恕我直言,没有规范的Subversion方法可以做到这一点。但是,如果您感兴趣的所有分支和标记都位于单个(或至少少数)目录中,则可以使用bash提取所需信息:

 diff -u <(svn ls URL -r $((REV - 1))) <(svn ls URL) | grep ^+ | tail -n +2 | cut -d + -f 2 | sed "s|^|URL/|"

其中URL是您正在查看的分支或标记网址,REV是您感兴趣的第一个修订版。请注意,此解决方案假定您只对分支和标记感兴趣是在特定修订之后/之后创建的,并且仍然存在

答案 1 :(得分:0)

我太懒了,无法准备好使用这样的黑客解决方案,正如迈克尔所做的那样,我将描述更简单的方法(来自真实数据的样本 - 但文件作为对象,而不是dirs和这种改变对解决方案并不重要)

  • 修订清单(迈克尔关于仍然适用的单个或最小父母点的警告)
svn ls -q URL
...
------------------------------------------------------------------------
r166 | lazybadger | 2009-10-29 21:46:40 +0500 (Чт, 29 окт 2009)
------------------------------------------------------------------------
r162 | lazybadger | 2009-10-28 22:40:09 +0500 (Ср, 28 окт 2009)
------------------------------------------------------------------------
r157 | lazybadger | 2009-10-28 19:23:59 +0500 (Ср, 28 окт 2009)
------------------------------------------------------------------------
r154 | lazybadger | 2009-10-28 15:42:29 +0500 (Ср, 28 окт 2009)
------------------------------------------------------------------------
r153 | lazybadger | 2009-10-28 15:25:36 +0500 (Ср, 28 окт 2009)
------------------------------------------------------------------------
r152 | lazybadger | 2009-10-28 15:18:46 +0500 (Ср, 28 окт 2009)
------------------------------------------------------------------------
r151 | lazybadger | 2009-10-28 14:54:32 +0500 (Ср, 28 окт 2009)
------------------------------------------------------------------------
r147 | SdimS | 2009-10-28 14:04:43 +0500 (Ср, 28 окт 2009)
------------------------------------------------------------------------

使用管道| grep -v -- | gawk -F ...,您可以获得纯粹的修订列表

r162
r157
r154
r153
r152
r151
r147

对于您可以调用的每个所需修订版本$ REV

svn ls URL@$REV >> FILE.WITH.LIST

我的回购中有一些启动修订版本

svn ls URL@147
spb2.bmp

svn ls URL@151
city.map
spb2.bmp

svn ls URL@152
balakovo.bmp
balashov.bmp
chebo.bmp
city.map
kaluga.bmp
msk.bmp
orenburg.bmp
penza.bmp
r-n-d.bmp
ryazan.bmp
samara.bmp
saransk.bmp
saratov.bmp
saratov2.bmp
spb.bmp
spb2.bmp
tula.bmp
ulianovsk.bmp
volsk.bmp
yaroslavl.bmp

现有多个修订对象将在公共文件中重复,并且在所有ls和压缩文件将包含所有对象之后,克隆可以用sort -u进行删除。这些对象是(或者只是)有趣的URL。

普通ls的一个限制是缺少历史标签 - 当每个对象出现时,你无法知道。在这种情况下,可能需要svn ls -v和稍微更难的列表后处理

svn ls URL@157 -v
    157 lazybadg              окт 28  2009 ./
    154 lazybadg         1272 окт 28  2009 Kerch.bmp
    157 lazybadg         1270 окт 28  2009 KrivoyRog.bmp
    157 lazybadg         1270 окт 28  2009 Mariupol.bmp
    152 lazybadg         1270 окт 28  2009 balakovo.bmp
    152 lazybadg         1270 окт 28  2009 balashov.bmp
    152 lazybadg         1270 окт 28  2009 chebo.bmp
    154 lazybadg         1272 окт 28  2009 cherkassy.bmp
    154 lazybadg         1272 окт 28  2009 chernigov.bmp
    157 lazybadg         6467 окт 28  2009 city.map
    154 lazybadg         1272 окт 28  2009 crimea.bmp

字段$ 1和$ 7(在awk-lingua中)将会很有趣,FILE将有更多唯一字符串($ 1 - 修订最后一次修改,对于revset而且有些时候更改对象你将为每个更改版本添加新字符串),类似于(用于清理文件)

 151 city.map
 152 city.map
 162 city.map
1300 city.map

你可以用sort -k来解决(注意第二个字段的固定位置)