gpt4 book ai didi

git - 将所有提交导出到 ZIP 文件或目录中

转载 作者:行者123 更新时间:2023-12-05 01:17:13 24 4
gpt4 key购买 nike

如何将所有提交导出到 ZIP 文件(包含所有文件,而不仅仅是补丁/差异):

myproject-commit1-67d91ab.zip
myproject-commit2-9283acd.zip
myproject-commit3-c57daa6.zip
...

或进入目录:

myproject-commit1-67d91ab/
myproject-commit2-9283acd/
myproject-commit3-c57daa6/

?

我在考虑这样的命令:

git archive --format zip --output myproject-commit3.zip c57daa6

来自 How do I export a specific commit with git-archive? ,但是如何获取所有提交呢?

注意事项:

  • 目标是对每次提交的所有文件进行导出,这样即使我没有git 也可以访问它们在机器上

  • 来自 How can I export Git change sets from one repository to another via sneaker net (external files)? 的答案创建一个 .bundle 文件,但如果没有 git 似乎无法访问它,所以这不是我要找的东西

  • 这几乎可以工作:

    for ((i = 0;; ++i)); do git checkout master~$i || break; tar czf ../myproject-commit$i.tgz .; done

    但它也会归档当前目录中所有的文件git add 到 repo... 如何避免这个问题?

最佳答案

你不能,除非你已经在考虑的方法。

具体来说,要将每个 提交转换为一个 zip 存档(每个提交一个单独的存档),只需迭代每个提交,将每个提交转换为一个 zip 存档。

您的迭代方法只需要遍历所有可能的提交,而不是仅遍历 master 分支的所有第一父级,并且您必须在每个分支上使用 git archive这样的 promise 。因此:

git rev-list --all |
while read hash; do git archive ...options... $hash
done

命令 git rev-list --all 告诉 Git 按某种顺序打印出每个可达的提交哈希 ID。要更改顺序,请使用 git rev-listgit log 可用的各种排序选项(例如,--author-date-order--topo-order)。

如果您想要每次提交——如果您只想要 master 的第一 parent ——您仍然可以使用 git rev-list 来做到这一点:

git rev-list --first-parent master | ...

在这里,由于 Git 仅遍历从 master 标识的任何提交开始的第一个父级,因此哈希 ID 将按照 Git 认为的前向顺序输出,即,向后跨越分支的第一个父级:

...--o--o--o--o--o--o------o   <-- master
\ \ /
\ X--X--...X <-- somebranch
\ /
X--X----X--X <-- anotherbranch

X 提交都不会出现,因为它们不在第一父沿袭中。 (没有 --first-parent,因为 somebranch 上的所有提交,以及 anotherbranch 上的最后一个提交,也是master 上,您将获得所有 X 提交。)

[Basj 添加了以下内容,由于 $((i=i+1)) 似乎是特定于 bash 的:] 编辑:这是一个随时可用的命令问题中描述:

git rev-list --all --reverse | while read hash; do git archive --format zip --output ../myproject-commit$((i=i+1))-$hash.zip $hash; done

[torek 觉得有必要添加 :-):请注意,上面列举的是顺序提交,即使这不是可逆映射。]

关于git - 将所有提交导出到 ZIP 文件或目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com