我有一个包含大量分支和标记的大型SVN存储库。
是否可以列出特定版本的所有分支和标签?
答案 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
来解决(注意第二个字段的固定位置)