2014-12-11 64 views
2

我遇到從Mercurial移動到Git並將nopCommerce的最新版本與我的更改合併的問題。從Mercurial移動到Git並與自定義更改合併

這是我做的。很久以前我就使用了nopCommerce mercurial倉庫(我認爲是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存儲庫的提交。

你對如何解決這個問題有什麼想法嗎?

回答

3

你可能猜對了你的問題的來源。 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** 

之後,您可能要克隆的回購,並刪除以前的副本實際上移除「你的」從磁盤歷史的副本。

+0

非常感謝! – 2014-12-12 04:52:20