gpt4 book ai didi

git - 使用 "git am"保留提交 ID 标签

转载 作者:行者123 更新时间:2023-12-04 16:49:35 27 4
gpt4 key购买 nike

我尝试(在一个小型测试存储库上)将存储库导出到一系列 .patch 文件中,这些文件是为每次提交使用 git format-patch 命令生成的,然后通过在空目录上使用“git init”,然后对每个补丁文件执行 git apply 命令来重建存储库。它起作用了 --- 只有一个问题 ---- 当 git am 将补丁应用到存储库而不是保留补丁的 ID 标签时,它会生成一个新的。这在以后可能会成为一个问题,因为它会导致难以确定哪些提交是多余的,哪些不是。

至于为什么我不使用像 git clone 这样的常规方法克隆存储库——答案是一般来说,我 em> 使用 git clone 来克隆一个存储库 - 但我现在有非常具体的原因来尝试看看我是否可以这样做,因为太长而无法在这里详细说明(尽管我可能暗示 在这个问题后面的原因)---不仅这些原因太长,而且我看不出他们的最终细节如何影响这个问题的正确答案。

但是,如果您告诉我 .patch 不是用于此目的的正确文件格式,我愿意接受。我最想做的是:

  1. 将对存储库的单个提交提取到单个文件中——并了解这些文件在存储库历史记录中的顺序等。

  2. 能够根据提交的那些提取版本完全重构存储库

  3. 稍后能够“去经典化”我认为不应该进行的任何提交(并且将其保留在存储库的历史记录中不值得它会导致项目历史膨胀 -大小),这样我就可以在没有“去规范化”提交的情况下重新构建 repo 协议(protocol)。 (顺便说一句,方面 #3 与我希望能够做到这一点的原因非常相关。)

最佳答案

我不是 100% 清楚你在这里问的是什么。我假设当您说“提交 ID 标签”时,您指的是 SHA。而且我根本不知道“补丁 ID 标签”是什么意思。

所以猜测...

当你在 git 中创建一个提交时,它有 6 个附加的元数据。这些是作者姓名/电子邮件/时间和提交者姓名/电子邮件/时间。如果您从头开始创建新提交,作者姓名/电子邮件和提交者姓名/电子邮件都将匹配。

他们不必做。您可以通过 GIT_AUTHOR_NAME 和类似的环境变量覆盖它们。如果你挑选或 rebase ,它会修改它们。

当您运行 git format-patch 时,它不会为您提供提交者信息根本。同样,当您运行 git am 时,它不会查找提交者信息,而是用运行 git am 的任何人的姓名和电子邮件覆盖它。如果该信息发生变化,这将导致创建不同的 SHA。

没有简单的方法来解决它(你必须破解 format-patch 和 am 以保留提交者信息。但是,你可以计算提交补丁 ID(git patch-id)并比较提交 SHA,而不是比较提交 SHA那些。它们应该是相同的。

关于git - 使用 "git am"保留提交 ID 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129194/

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