相同的git存储库,相同的历史记录,不同的提交哈希?

时间:2018-10-05 18:24:22

标签: git github gitlab

几年前,我在自己的gitlab服务器上克隆了CPython。 Total我只是试图将最新的信息从官方的github仓库中提取/合并到我的gitlab的仓库中,但是由于没有共同的历史而失败了。

所有提交都在那儿,一些作者,提交消息的日期等。但是所有提交哈希都是不同的。有人知道这是怎么发生的吗?从github-> gitlab进行的导入操作是否与克隆操作有所不同?可能是较旧的gitlab行为?

谢谢

编辑: 来自GitHub的初始提交的cat文件为:


tree 52384aa82c1f7785424544fc3ee003729b07ac12  
author Guido van Rossum <guido@python.org> 650211915 +0000 
committer Guido van Rossum <guido@python.org> 650211915 +0000  

HG:extra convert_revision:svn%3A6015fed2-1504-0410-9fe19d1591cc4771/python/branches/legacy-trunk%402161  

Initial revision

我的Gitlab版本中用于初始提交的cat文件是:


tree 52384aa82c1f7785424544fc3ee003729b07ac12  
author Guido van Rossum <guido@python.org> 650211915 +0000  
committer Guido van Rossum <guido@python.org> 650211915 +0000  

Initial revision

想知道HG / SVG额外信息是如何丢失的。

1 个答案:

答案 0 :(得分:3)

对象的哈希值完全取决于对象的内容。

找到两个存储库的根提交并检查其数据(git cat-file -p)。 某些事情会有所不同。所有其他差异均源于此。否则,历史会匹配到某个点,这时会有所不同,然后历史会发生分歧。

通常,这种情况发生在某人进行大量的git filter-branch重写历史记录时。克隆肯定不会执行 操作,但是如果导入程序未设置其他VCS的所有提交的所有数据,或者从其他版本控制系统(SVN或Mercurial)导入,则可能会执行此操作项目通过不同的映射器(例如,Mercurial提交者与Git不匹配,因此需要一张地图)。

每编辑一次编辑:显然HG:extra行是不同的。 (treeauthorcommitter和主要提交文本行是相同的。)HG:extra数据特定于Mercurial;在这种情况下,这似乎是由于从SVN导入到Mercurial。 Python在Mercurial中维护了一段时间,但现在在Git中维护。也许Python最初是在SVN中维护的。给定日期,这是有道理的:如here所述,Python在SVN或Mercurial之前就已存在; SVN创建于2000年,2004年发布了1.0;水星成立于2005年。(Git also dates to 2005.