使用“git am”保留提交 ID 标签

问题描述 投票:0回答:1
我尝试(在一个小型测试存储库上)将存储库导出到一系列使用

.patch

 命令为每次提交生成的 
git format-patch
 文件中,然后通过在空目录上使用“git init”来重新构建存储库,然后使用每个补丁文件都有一个 
git apply
 命令。它有效——只有一个问题——当 
git am
 将补丁应用到存储库而不是保留补丁的 ID 标签时,它会生成一个新的 ID 标签。这可能会在以后成为一个问题,因为它可能会导致很难确定哪些提交是多余的,哪些不是多余的。

至于为什么我不使用像

git clone

这样的常规方法来克隆存储库 - 答案是
一般来说,我确实使用git clone
来克隆存储库 - 但我有非常具体的原因尝试看看我是否可以这样做的时刻太长了,无法在这里详细说明(尽管我可能会
暗示原因)稍后在这个问题中)---不仅这些原因太长,而且我看不出它们的最终细节如何影响这个问题的正确答案。

但是,如果您告诉我

.patch

 不是用于此目的的正确文件格式,我愿意接受。我最想做的是:

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

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

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

git version-control format-patch git-am
1个回答
4
投票
我不是100%清楚你在这里问什么。 我假设当你说“提交 ID 标签”时你指的是 SHA。 我根本不知道你所说的“补丁 ID 标签”是什么意思。

所以猜测...

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

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

当您运行

git format-patch

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

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

© www.soinside.com 2019 - 2024. All rights reserved.