繁体   English   中英

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

[英]Preserving commit ID-tag with “git am”

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

至于为什么我不使用像git clone这样的克隆存储库的常规方法-答案是, 一般来说 ,我确实使用git clone克隆存储库-但目前我有非常具体的原因尝试查看是否我可以通过这种方式进行处理,以至于无法在此详细介绍(尽管我可能会提到稍后在此问题中提及的原因)---这些原因不仅太长,而且我也看不到它们的最终细节可能会影响此问题的正确答案。

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

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

  2. 能够基于提取的提交版本完全重构存储库

  3. 后来能够“取消规范化”我确定不应该进行的任何提交(并且将保存在存储库历史中的记录不值得给项目历史记录大小造成的膨胀),以便我可以重新构建回购协议,而无需进行“取消规范化”的提交。 (顺便说一句,#3方面与我希望能够做到这一点的原因非常相关。)

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

所以猜测...

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

他们不必做。 您可以通过GIT_AUTHOR_NAME和类似的环境变量来覆盖它们。 如果您选择或重新设置,则会对其进行修改。

当你运行git format-patch它不为你提供提交者信息都没有 同样,当您运行git am它不会查找提交者信息,而是使用正在运行git am的人的名称和电子邮件覆盖它。 如果该信息发生更改,这将导致创建不同的SHA。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM