将包含`.git`目录的Git代码库目录压缩为Zip文件

4
我想将包含 .git 目录的 git 仓库目录压缩成 zip 文件。我尝试过对该目录进行 tar 压缩,但由于它包含所有子模块,所以创建的文件夹比原始文件夹更大。
我尝试了以下命令,但它们并不包括 .git 目录- git archive master --format=tar --output="../gridImageSearch.zip" 以下命令会包括 .git 目录,但文件夹太大- tar -zcvf ../blah.tar.gz blah 有什么建议吗?
3个回答

5

使用以下命令压缩git仓库:

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

如果你想在不包括 .git 目录的情况下压缩仓库,请运行:
tar -c --exclude .git -f - foo | gzip >foo.tgz

1
如果你的git仓库目录包含未被版本控制的文件,而你不想将它们包含在zip文件中,一个更简单的方法是将仓库git clone到一个新目录,并压缩整个新目录。

0
这是一个可能的答案。您可以使用find命令生成存储库中所有文件(不包括子模块中的文件)的列表。我们将子模块标识为“包含.git目录的目录”。find命令如下:
find . \( \! -depth 0 -type d -execdir test -f {}/.git \; -prune \) \
  -o -type f -print

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

您可以将此作为输入传递给tar命令:

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

该命令接受标准输入中的文件列表(-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可以帮助避免这种情况。

  • 您可能还会构建包括尚未提交到存储库的更改的归档文件。 在运行脚本之前,可以明确检查未提交的更改来避免此问题。


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