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



几年前,我在自己的gitlab服务器上有一个CPython的克隆。总计 我只是尝试将官方 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 额外信息是如何丢失的。

对象的哈希完全由对象的内容决定。

找到两个存储库的根提交并检查它们的数据(git cat-file -p(。有些事情会有所不同。 所有其他差异都源于那里。 否则,历史会匹配到某个点,此时会有所不同,然后历史会分道扬镳。

一般来说,当有人做大规模的git filter-branch来改写历史时,就会发生这种事情。 克隆绝对不会这样做,但是如果导入器没有从其他 VCS 设置每个提交的所有数据,或者如果您通过不同的映射器运行项目(例如,Mercurial 提交者与 Git 不匹配,因此需要映射(,则从其他版本控制系统(SVN 或 Mercurial(导入可能会这样做。

每次编辑编辑:显然是HG:extra行不同。 (treeauthorcommitter和主提交文本行相同。HG:extra数据特定于 Mercurial;在这种情况下,这似乎是由于从SVN导入到Mercurial。 Python 在 Mercurial 中维护了一段时间,但现在在 Git 中维护。 也许Python最初是在SVN中维护的。 考虑到日期,这是有道理的:正如这里所指出的,Python 在 SVN 或 Mercurial 之前就存在了;SVN创建于2000年,2004年发布了1.0;Mercurial创建于2005年。 (Git 也可以追溯到 2005 年。

最新更新