繁体   English   中英

压缩包含 `.git` 目录的 git 存储库目录

[英]Zip a git repository directory with `.git` directory included

我正在尝试压缩包含.git目录的 git 存储库目录。 我尝试在目录上做一个 tar,但它创建了一个比原始文件夹更大的文件夹,因为它附加了所有子模块。

我尝试了以下命令,但它们在没有.git目录的情况.git压缩 -

git archive master --format=tar --output="../gridImageSearch.zip"

以下命令使用.git目录.git ,但文件夹太大 -

tar -zcvf ../blah.tar.gz blah

有什么建议吗?

使用压缩 git 存储库

tar -c -f - foo | gzip >foo.tgz

如果您希望在没有.git目录的情况.git压缩存储库,请运行

tar -c --exclude .git -f - foo | gzip >foo.tgz

这是一个可能的答案。 您可以使用find命令生成存储库中所有文件的列表,不包括子模块中包含的文件。 我们将子模块标识为“包含.git目录的目录”。 查找命令将是:

find . \( \! -depth 0 -type d -execdir test -f {}/.git \; -prune \) \
  -o -type f -print

这意味着“查看此目录中包含的所有内容,如果它是一个目录并且包含一个名为.git并且不是顶级目录,则不要进入它,否则打​​印出文件名”。

您可以将其用作tar命令的输入:

tar -T- -n -cz -f repo.tar.gz

它接受 stdin 上的文件列表( -T- ,确保不会递归到子目录中(因为find已经为我们完成了),并创建( -c )gzip 压缩( -z )输出。

完整的命令如下所示:

find . \( \! -depth 0 -type d -execdir test -f {}/.git \; -prune \) \
  -o -type f -print |
tar -T- -n -cz -f repo.tar.gz

这将在您的当前目录中创建一个名为repo.tar.gz的压缩 tar 存档。

这将失败的方式:

  • 如果不使用git archive ,您可能会意外地在工作目录中包含不属于 git 存储库的文件。 使用git clean可以帮助避免这种情况。

  • 您还可以构建一个存档,其中包含尚未提交到存储库的更改。 您可以通过在运行脚本之前显式检查未提交的更改来避免这种情况。

如果您的 git 存储库目录包含未版本控制的文件,并且您不想将它们包含在 zip 文件中,则更简单的替代方法是将存储库git clone到新目录,然后压缩整个新目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM