SVN直接转tar

SVN直接转tar

有没有办法直接将最新版本的 SVN 文件夹打包成 tar 而不包含 SVN 隐藏文件?我想创建一个不包含 SVN 文件的 tar 存档。我知道您可以使用 SVN 跟踪文件获取最新版本,但是有没有一行程序可以直接将信息发送到存档?

答案1

复制不包含所有 .svn 文件夹的存储库的最新版本的最简单方法是使用命令svn export

以下是我制作档案的方法:

$ svn export URL PATH ; tar czf exported_copy.tgz PATH

其中 URL 是您的 svn 存储库的 URL,PATH 是适合保存导出存储库副本的本地路径。我不知道还有比这更直接的方法。不幸的是,您最终会保留导出的副本,因此您可能只想将整个内容放入一个简短的 bash 脚本中,然后删除临时文件。

编辑:虽然这是最简单的方法,也是我用过的方法,但我会小心谨慎。在我的研究中,我发现了这一点 http://narfation.org/2009/01/08/creating-recreatable-tar-gz-from-svn 这清楚地告诉我们,保留组/用户所有权的问题会导致部署到另一个系统时出现问题。我已尝试过此脚本并根据自己的目的进行了修改,您可能也会从中受益。

答案2

也许 tar 1.23 版本允许您从命令行排除所有版本文件,但不幸的是,它在我的 1.20 版本上不起作用:

tar --exclude-vcs -cvzf archive.tar.gz directory/

答案3

转到 subversion 工作目录(checkout)并运行以下命令:

find -name .svn -prune -o -print | cpio -o -H tar | gzip > archive.tar.gz

如果您使用 GNU 实用程序,您还可以运行:

find -name .svn -prune -o -print0 | cpio -o -0 -H tar | gzip > archive.tar.gz

如果可能的话,我建议使用乌斯塔尔格式 (-H ustar)。

答案4

如果我理解正确的话,您想要对 svn checkout 的结果进行 tar 处理吗?

因此,在伪代码中,它看起来像这样:

svn export branch; find branch | grep -v '/.' | xargs cp tarbranch ; tar -zcf tarbranch.tgz tarbranch

相关内容