[英]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.