包括实际代码库的Git文档归档?

8

我需要创建一个Git项目的档案,忽略并排除由.gitignore指定的文件,但包括实际的.git存储库文件夹。简单地运行git archive master会省略.git文件夹。

有没有办法让git archive包括.git文件夹,但仍然忽略由.gitignore指定的文件?


1
你可以直接复制.git文件夹,然后checkout HEAD来获取你的文件。或者你可以将其作为远程仓库进行获取传输。 - poke
3个回答

16

由于 git archive 只生成 tar 存档文件,您可以直接使用 tar 来操作该文件。

$ git archive HEAD > tar.tar
$ tar -rf tar.tar .git

tar的-r选项将给定的文件添加到正在处理的归档中(在-f之后指定)。查看tar的man页,了解tar所拥有的令人生畏的功能列表。


这应该是被接受的答案,因为它考虑了.gitignore。 - djanowski

3

看起来像是在做这样的事情

# copy over all project files except for those ignored
git clone /path/to/repository /path/to/output 
# create a tar.gz archive of the project location
tar czvf projectExport.tar.gz /path/to/output
# remove the cloned directory
rm -fr /path/to/output

完成了任务。虽然这不是世界上最美丽的解决方案,但它似乎能够正常运行。

这不考虑 .gitignore 文件。 - djanowski

0

git bundle是一个较新的命令,允许创建一个可与远程机器共享的存档文件。 git bundle更加灵活,因为它允许增量更新和合并不同分支。然而,你可以创建一个使用完整规范(例如master)的bundle。

一个缺点是远程机器也需要git。bundle是一个'pack'文件,文件需要从bundle中“检出”以在远程创建工作目录(与tar相反)。具有tar && git!tar && !git的机器组合比tar && !git!tar && git的机器组合要多得多。也就是说,机器很可能同时拥有或没有两者。特别是当你打算构建源代码时。

对于Windows机器,很可能两者都没有。可以使用'zip'格式。

git archive -o ../archive.zip --format=zip HEAD
zip -ur ../archive.zip .git/

......并向您表示慰问。


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