从 Mercurial 迁移到 Git 并与自定义更改合并



我在从Mercurial迁移到Git并将nopCommerce的最新版本与我的更改合并时遇到了问题。

这是我所做的。我很久以前克隆了nopCommerce汞存储库(我认为是2.60版本(。从那以后,我对平台进行了许多更改,并将它们与较新版本的nopCommerce合并。我做的最后一次合并是在 3.10 版。

现在我看到nopCommerce开始使用Git,所以我将我的mercurial存储库转换为Git(遵循本指南:http://arr.gr/blog/2011/10/bitbucket-converting-hg-repositories-to-git/(。但是现在,当我提取nopCommerce更改(直到版本3.50(时,我得到以下内容:"警告:没有共同提交",并且所有提交都被下载(不仅仅是新的,从3.10到3.50(,尽管我已经在我的存储库中提交了到版本3.10。基本上,nopCommerce提交到版本3.10是重复的。我认为会发生这种情况,因为它们有不同的提交编号(当我将我的 mercurial 存储库转换为 Git 时,提交获得了不同的提交编号,并且我看到新的 nopCommerce Git 存储库也具有与旧 Mercurial 存储库不同的提交编号(。

问题是,当我将nopCommerce v3.50与我所做的更改合并并尝试解决冲突时,BASE文件为空,因为Git没有看到它们具有共同的祖先。LOCAL 文件将我的仓库中的提交作为祖先,REMOTE 文件将新 Git 存储库中的提交作为祖先。

您知道如何解决此问题吗?

您可能猜对了问题的根源。Git 看到两个完全独立的历史,不知道如何处理它们。您可以使用git replace解决此问题:

  • 找到您的历史记录和他们的历史记录之间的最新共同祖先(=在两个历史记录中都有副本的最新提交(。请注意这些提交的屁股。
  • 运行git replace **sha-in-your-history** **sha-in-theirs**

看看新git log,看看结果是否符合你的喜好。如果是,您可以通过运行以下命令使更改永久化:

git filter-branch --tag-name-filter cat -- --all
git replace -d **sha-in-your-history**

之后,您可能希望克隆存储库并删除上一个副本,以实际从磁盘中删除历史记录的"您的"副本。

最新更新