如何将整个git repo输出到单个文件?

时间:2014-08-24 05:31:24

标签: git git-diff

我创建了一个git repo,我希望将所有提交的整个git repo作为单个补丁文件。

我已尝试过很多SO帖子,但无法在任何地方找到合适的解决方案。

3 个答案:

答案 0 :(得分:6)

为了创建封装整个存储库的单个补丁,您需要将当前HEAD与空树进行区分。这样的树在SHA1 4b825dc642cb6eb9a060e54bf8d69288fbee4904下的git中可用(如果您通过清空索引并发出git write-tree来创建空树,那么这将是您获得的SHA1。每个git存储库都有一个。)< / p>

因此,您要查找的命令是:

git diff --binary 4b825dc642cb6eb9a060e54bf8d69288fbee4904..HEAD

--binary选项确保二进制内容将包含在diff中,并且文件名不会缩写。

答案 1 :(得分:2)

虽然user4815162342&#39; answer在技术上是正确的解决方案(upvoted),Palak Arora的问题是关于&#34;整个git repo with all提交为单个补丁文件&#34;可能会有不同的解释。

以下是另外两种可能性,等待Palak的反馈:


如果通过补丁&#34;所有提交&#34;你的意思是git repo的完整历史记录为一个文件,你可以考虑creating a bundle
它是一个单独的文件,实际上是一个Git仓库:你可以从该文件中获取,拉取或克隆;

cd /path/to/your/repo
git bundle create /tmp/foo-all --all

如果你的补丁&#34;实际上是当前仓库的全部内容,您也可以使用git archive

cd /path/to/your/repo
git archive -o /tmp/foo.tar --format=tar .

在这两种情况下,它们与经典补丁的不同之处在于,您不会使用捆绑包或存档来应用&#34; &#34;补丁&#34;在现有的代码库上,而是从头开始快速重建代码库。

答案 2 :(得分:1)

因为,我自己尝试了另一种方法,我想在这里发布。这正是我所需要的。

git log --pretty=format:"%H - %an, %ad : %s" --author "<your name>" --after="2014-05-19 00:00:00" --before="2014-08-18 00:00:00" -p --no-merges > ~/<path to some folder>/myrepo.patch