检查两个git存储库是否相关

时间:2019-10-08 12:41:27

标签: git revision-history

给出两个裸露的非浅层git存储库,我如何以编程方式(通过Python脚本)检查它们是否相关?存储库可能具有完全不同的分支,或者指向不同历史的同名分支。如果我只是简单地进行推送(可能使用--dry-run),即使两个存储库没有任何共同之处,git也只会创建一个新分支。如果我反向执行“拉”操作,则git会显示“拒绝合并无关的历史记录”,但使用--dry-run时,则不会显示任何错误。

我的想法是获取两个存储库中的所有 all 提交哈希列表(包括所有分支和没有分支头的“丢失”提交),并检查它们是否包含一个公共子集。但是,我找不到真正找到所有哈希的方法。

我需要将此作为脚本的一部分,该脚本会自动收集对许多存储库所做的更改,并将其合并到那些存储库的旧版本中,但要确保不要意外地将错误的存储库推入错误的,可能是同名的但无关的存储库

1 个答案:

答案 0 :(得分:1)

要获取回购中所有提交哈希的列表

git rev-list --all --full-history

这将报告从任何引用可访问的每个提交的哈希值,同时禁用历史记录简化功能-这样可以可靠地为您提供每个提交哈希值。

(可能会“错过”悬空的提交,但是这些提交通常不会被推送或获取,并且会被任意删除,因此没有真正的理由对其进行计数。)

对于要推送到的存储库,上面的内容应该没问题。对于您要推出的存储库,上面的方法同样适用,但是比较所有散列可能会浪费时间。如果现在您正在应用什么更改,并且该更改有意义地适用,那么您应该能够找到该更改可达到的提交之一。

因此,例如,如果您让裁判告诉您上次同步分支的位置,则可以从列表中排除那些裁判可以访问的所有内容。 (或者,如果您只想使特定分支保持同步,则可以省略--all,而只rev-list个分支。)