![SVN直接转tar](https://linux22.com/image/1223370/SVN%E7%9B%B4%E6%8E%A5%E8%BD%ACtar.png)
有没有办法直接将最新版本的 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