2013-08-16 218 views
4

每個人都知道不同的東西通過「合併git倉庫」,所以這裏是我的情況。我們有一個TFS倉庫,我們已經在一個時間點檢查了資源並做了一個初始的git commit。然後我們在git中進行了正常的開發(分支,合併等)。問題是,在新的存儲庫中,我們沒有在git倉庫中存在歷史記錄,我們希望解決這個問題。因此,我已將整個TFS存儲庫轉換爲git存儲庫,現在我需要將轉換後的TFS存儲庫與當前的git存儲庫合併。添加歷史的Git倉庫或合併的git倉庫

如從上面的描述中的信息庫是獨立的從git的觀點來看是顯而易見的,但從它們具有一個邏輯點提交的共同(提交,成爲初始提交到當前git倉庫)。

如何合併,而不會丟失任何他們的歷史的回購?我可以將轉換後的TFS回購作爲基礎,然後櫻桃從當前回購的主數據中選擇更改,但不會導入當前回購中創建的所有分支。

回答

2

編輯:我以前的答案不會導致沒事找事。 git rebase不是爲了做到這一點。 然而,類似的事情已經發生在計算器:Merging two git repositories to obtain linear history

你可以用這個方法嘗試:

git init combined 
cd combined 
git remote add old url:/to/old 
git remote add new url:/to/new 
git remote update 

你將有一個新的回購協議,與雙方回購引用。那麼

git reset --hard old/master 

這將使主分支指向舊回購的主分支。 現在你可以挑櫻桃所有提交的新回購主分支

git cherry-pick <sha-1 of first commit on new repo>..new/master 

我們是我們開始:主分支是好的,但如何在新的回購其他部門? 好了,你不需要你的老回購了,所以

git remote rm old 

話,說你有一個在你的新庫命名爲「BRANCH1」分支。

git checkout branch1 
git rebase master 

這應該改變BRANCH1的歷史,使其從主啓動(組合的主服務器,包含從進口回購歷史)和重訂基期應該沒有衝突發生。 檢查歷史與gitk一致的,那麼你可以強制推送與

git push -f new master 
git push -f new branch1 

你必須要相信,歷史是迫使推之前確定,因爲這將改變上游歷史(保持新老回購的備份如果需要恢復)

+0

你所說的「開放分支」意思?以後的重組會不會導致所有這些不同分支的所有提交都堆積在一個分支上(老主席;假設沒有衝突)? –

+0

否,branch newrepo/master將重新從oldmaster開始,然後是newrepo/branch1等。這假設在舊回購中只有一個分支;通過「開放式分支」,我的意思是所有不同於主人的分支,你想在你的git倉庫中進行重組。最終的結果應該是,你的新git倉庫中的每個分支都預先安裝了oldmaster的內容。最終,在每次重組之前,您需要切換到您正在重組的分支。(git checkout newrepo/branch1; git rebase oldmaster) – p91paul

+0

newrepo中的所有分支都來自最初導入到git中的一個提交,所以我假設我只有一個「開放分支」,即使後來在許多其他分支上創建這個起點,對嗎?但是我的oldrepo在過去的穩定版本中包含了一些分支,這是如何改變這種情況的? –