如何分离本地SVN工作副本?

4
我不能只运行rm -rf $(find . -name '.svn'),因为我的工作副本中有一些未版本化的目录(在svn:ignore上)同时也是其他svn库的工作副本。
所以我想要告诉subversion仅删除属于此工作副本的所有.svn目录。
这可能吗?
目录结构非常复杂,因此手动完成真的很麻烦。
编辑:最终的解决方案是: for i in $(export IFS=$'\n'; grep -l 'https://complete-repo-path/' find . -name entries|grep .svn | sed 's/ /\ /' | sed 's/.svn/entries//'); do echo $i.svn; done

2
不确定是否有效,但您可以尝试使用 svn export 命令,并告诉 SVN 也导出未版本化的文件(虽然我不知道如何从命令行执行此操作,因为我是一个 Tortoisian :) - Pekka
@Vulcan,似乎在导出工作副本时无法实现:http://svnbook.red-bean.com/en/1.0/re10.html 很遗憾,否则它本来是解决方案。可以获取干净的工作目录副本,但这不会保留被忽略的文件。 - Pekka
你可以使用 svn propget 命令获取所有忽略列表,然后按照你的建议递归地从未在忽略列表中提到的目录中删除 .svn 目录。 - Jakob Borg
@Pekka:这个方法在这里不起作用,因为目录大约有80 GB,而分区大小是120 GB ;) - Simon A. Eugster
@calmh 对的。但是svn:ignore输出很难解析。 - Simon A. Eugster
1个回答

1

这似乎是一个变通方法,但仍然...

这将给出包含您的svn存储库URL的目录列表:

grep -l 'https://yourhost/svn/your_working_copy' `find . -name entries|grep .svn` | sed 's/\.svn\/entries//' | xargs echo

如果您认为它正确,那么您可以在此之后使用rm -rf删除它们。


1
谢谢!不错呀。这个代码可行。我稍微修改了一下表达式,让它也能处理带空格的文件名,通过设置文件分隔符字符:for i in $(export IFS=$'\n'; grep -l 'https://yourhost/svn/your_working_copy' $(find . -name entries|grep .svn) | sed 's/.svn/entries//'); do echo '##' $i '##'; done (因为注释中的是格式化语法,所以将``转换为$()) - Simon A. Eugster
我注意到这段代码没有正确处理空格,已在问题中添加了纠正的表达式。 - Simon A. Eugster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接