如何在svn目录中使用tar并过滤掉所有的.svn文件?

35

我正在尝试创建一个tar文件来部署一些代码,但是我不想部署所有的“.svn”文件。

我该如何过滤这些文件?它们分布在多个目录中...

5个回答

70
tar --exclude=.svn -z -c -v -f mytarball.tar.gz mydir/

33
你也可以使用“--exclude-vcs”。 - mjlee
非常好,将一个包压缩从91MB降至54MB :) - Ain Tohvri
1
请注意,--exclude-vcs 仅适用于 tar 1.28 及以上版本。 - mc_electron

31

如果您的tar版本为1.28或更高版本,请尝试使用

tar --exclude-vcs

它可用于备份包含以下内容的目录:

  • 一个单独的svn仓库
  • 多个svn仓库
  • 没有svn仓库

手册上看:

‘--exclude-vcs’ 排除以下版本控制系统使用的文件和目录:‘CVS’、‘RCS’、‘SCCS’、‘SVN’、‘Arch’、‘Bazaar’、‘Mercurial’和‘Darcs’。

注意:

对于某些tar版本,--exclude-vcs必须是第一个参数。


至少在Cygwin上,使用此标志时仍会包括SVN文件。 - Joseph Lust
它只存在于tar 1.28及以上版本中。 - mc_electron
1
@jmlarson 我在Ubuntu 18.04上也遇到了1.29的同样问题。我不得不改变选项的顺序,才使它正常工作。值得注意的是,在所有其他选项之前,将--exclude-vcs放在首位是有效的。 - Stephan Samuel

4

3

您可以使用svn导出功能获取不带.svn文件夹的干净文件版本。

请在与您的工作副本不同的位置执行此操作。


2

方法一

在这个帖子中,扩展了引用SVN Book的解决方案(这是以SVN为中心的),我给出了以下示例:

c:> svn export -r rrev https:/A_SERVER/svn/A_REPO/A_PROJECT/ c:\tmp\arepo--aproject--rrev\

c:\tmp\arepo--aproject--rrev> tar zcvf arepo--aproject--rrev.tar.gz *

方法二

还有另一个长而且信息丰富的线程,可以在以下位置找到:

如何让`find`忽略.svn目录?

这个不同的讨论对我来说更多地是集中于find和tar。 (两个有趣的话题)

对于我来说,最好使用上面的第一种解决方案。

我大多数时候都能让另一个“从过滤的STDIN方式查找”的方法工作,但考虑到使用所有DOS、Linux、find变体、xargs等的复杂性和不确定性,它并不总是稳定的。


同意。对于一个新的检出,(1)是最好的方式。但是假设这是在“构建”之后,您想要将事物打包到您运行构建步骤的目录中,则(2)是一个好的解决方案(因为一些生成或编译内容不在svn中)。 - optimistAk

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