没有Git元数据的Tarballing

zaf*_*zaf 49 grep packaging tar find xargs

我的源代码树包含几个使用Git源代码控制的目录,我需要对整个树进行tarball,不包括对Git元数据或自定义日志文件的任何引用.

我以为我会使用find/egrep/xargs/tar的组合,但不知何故tar文件包含.git目录和*.log文件.

这就是我所拥有的:

find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar
Run Code Online (Sandbox Code Playgroud)

有人能在这里解释我的误会吗?为什么tar处理find和egrep正在过滤的文件?

我也对其他技术持开放态度.

Ole*_*nge 96

当文件数量增加到多个xargs命令时,你会得到一个令人讨厌的惊喜:然后你将首先制作第一个文件的tar文件,然后用其余的文件覆盖相同的tar文件.

GNU tar有--exclude选项可以解决这个问题:

tar cvf ~/app.tar --exclude .git --exclude "*.log" .
Run Code Online (Sandbox Code Playgroud)

  • 也适用于OS X上的bsdtar. (4认同)

Iva*_*van 51

您可以直接尝试使用tar选项--exclude-vcs:

--exclude-vcs:
          Exclude version control system directories
Run Code Online (Sandbox Code Playgroud)

例如:

tar cvfj nameoffile.tar.bz2 directory/ --exclude-vcs
Run Code Online (Sandbox Code Playgroud)

它适用于Git.

  • @zaf yes =仅GNU tar.MacOSX附带bsdtar,没有它. (3认同)
  • 谢谢,但我的tar版本"选项--exclude-vcs不受支持". (2认同)

jkr*_*mer 12

尝试这样的事情:

git archive --format=tar -o ~/tarball.tar -v HEAD
Run Code Online (Sandbox Code Playgroud)

将.log文件和其他您不想打包的内容添加到.gitignore文件中.


Pel*_*oNZ 12

要排除版本控制系统目录:

tar --exclude-vcs

这将排除svn,git元文件等.


Kes*_*shV 5

较新的 GNU tar 可以选择使用标志 --exclude-vcs 自动排除版本控制目录。这也将处理 .git。