Tar 一个没有 .git 文件的文件夹?

chr*_*lee 31 tar git

如果我 tar 是一个 git 存储库的文件夹,我可以在不包含.git相关文件的情况下这样做吗?如果没有,我将如何通过命令来做到这一点?

mte*_*sha 57

最简单的答案:添加--exclude-vcs. 这不包括所有版本控制系统目录

我个人使用

tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Run Code Online (Sandbox Code Playgroud)

所以你需要做的就是--exclude-vcs在命令的末尾添加。

  • 似乎 OSX Catalina 的 tar 不支持该选项...... (5认同)
  • 所有选项都需要放在 GNU/Linux 上的参数之前。 (3认同)
  • 如 GNU/Linux 所述```tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME``` (3认同)
  • @FranMarzoa @Decy `--exclude-vcs` 仅受 gnu tar 支持。在 MacOS 上,您可以使用 brew 安装它,就像这样`brew install gnu-tar`。然后你可以运行`gtar --exclude-vcs [...]` (3认同)
  • 我想所有“已知”的?;) (2认同)

Sté*_*nez 34

先来看看git help archivearchive是一个 git 命令,它允许制作仅包含 git 跟踪文件的档案。可能是你正在寻找的。手册页末尾列出了一个示例:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Run Code Online (Sandbox Code Playgroud)

  • 这仅存档 root git repo。如果使用了子模块 - 它们的目录将为空。 (8认同)

Gil*_*il' 25

如果您希望存档包含 git 跟踪的文件,但不包含 git 存储库本身或任何生成的或未跟踪的文件,请使用git archive.

如果您特别想排除.git但包含其他所有内容,在 Linux 或 FreeBSD 或 OSX 或 Cygwin 下,tar 有一个简单的选项来排除目录:

tar -c --exclude .git -f - foo | gzip >foo.tgz
Run Code Online (Sandbox Code Playgroud)

使用 GNU tar(即在 Linux 或 Cygwin 下),您可以将其缩短为tar czf foo.tgz --exclude .git foo.

创建档案的 POSIX 方式是pax.

pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
Run Code Online (Sandbox Code Playgroud)

  • @StéphaneGimenez 可能不是。但是它确实可以在`tar` 没有`--exclude` 选项的系统上编译,例如OpenBSD(它确实复制了pax 的`s` 选项,但这不是常见的tar 命令语法扩展)。 (3认同)