2013-02-11 52 views
0

有各3個項目有自己的混帳回購協議:兩個鬆散耦合分叉的Git項目內恢復歷史

  • 項目A,項目獨立B的
  • 項目B,一個項目獨立的A
  • 項目AB,一個項目,使用一些A和B的一些。來源,文件結構等的融合,並進行了一些修改,以允許兩者正確混合。

項目A和項目B大多死亡,但在創建AB之後確實收到了一些小補丁,其中一些補丁後來移植到AB。 AB的git repo創建時沒有A或B的歷史記錄。我很容易判斷哪個文件或目錄來自A,哪些來自B,我知道每個初始文件從哪個提交。

如何還原歷史AB初始化之前,假定AB的所有文件都是基於文件從A還是B?

請記住以下幾點:

  • 從A文件可以是B類的目錄,反之亦然,所以我應該能夠處理移動
  • 在某些時候,我倒要變基AB的移植的補丁,使他們從A或B.歸因於合併
  • 我想爲A或B能夠合併AB,雖然只有其中的一個能夠做到這一點會沒關係,只要我能控制哪一個。
  • 大約有30-50個文件,所以我仍然可以爲每個文件重新配置文件,如果我不必這樣做,那將是首選。

回答

2

一般而言,您可能想要將A和B設置爲根提交的父項。你可以在這裏看到如何做到這一點:

https://stackoverflow.com/a/4164767/758345

的Git現在就明白了這些文件的來源以及還處理重命名等,您現在應該能夠從A和B合併爲AB。

你永遠不能合併AB到A或者B,AB作爲還包含其他項目。你也許可以用櫻桃採摘,但我也懷疑這一點。如果你想從AB的變化被貢獻給A和B,你應該看看submodules和git-subtree。

+0

我真正通過合併AB爲A或B的意思是通過使AB訪問一個維護者或B維護者引入文件B或B文件到。我們的目標是繼續與AB合作,但要接觸A或B中的「卡住」的人。 – DavidJFelix 2013-02-20 13:57:41

+0

正如我所說的,將AB合併到A或B中*非常有問題,除非A和B在單獨的目錄中AB。或者,您可以編寫一個幫助程序腳本來整理屬於A或B的AB部分。但就我所知,git不包含任何此類功能。 – Chronial 2013-02-20 16:04:20