2012-11-17 185 views
3

谷歌整整一天之後,我將不得不請專家來幫助我。把兩個git倉庫合併成一個有兩個分支的倉庫

我克隆了一些我轉換爲git的公共SVN回購。這個回購只有一個主分支,它從一些特定的版本開始,比如說1.0。

我也有一個獨立創建的git倉庫,並且從1.0版本開始。我創建這個是因爲我想破解一些公共項目。我剛剛下載了源代碼,創建了空的git repo,添加了1.0版本並着手對它進行破解。這個回購也只是主分店。

現在,我會撒謊創建第三個git倉庫,其中版本1.0將作爲起點,它將有兩個分支:'svn'和'mystuff'。我想保留兩個分支的歷史。

 1.0 
    / \ 
    / \ 
br. svn br. mystuff 
    |  | 
    v1.1  v1.1' 
    v1.2  v1.2' 
    v1.3  v1.3' 
    .   . 
    .   . 

如果我有這個,我可以使用svn2git很容易地從SVN回購新的修訂版本,並輕鬆地與我的地方「的MyStuff」分支合併。我不需要推送到SVN回購,只需從它獲取新的修訂版。

你能幫我再次使用git樂趣嗎?

回答

2

那種 - 哈克的,方法是使用git format-patch到回購的所有提交導出到一個目錄,git checkout對方的回購1.0分支,創建一個新的分支(git checkout -b new-branch),然後git am您以前生成的補丁。

因此,我們打電話給public您的公共SVN回購克隆,以及local您通過下載源代碼和黑客入侵的git回購。

cd local 
mkdir ../patches 

# -o tells the output directory for the patches 
# the git log ... gives you the hash of the second commit of the repo (the first one 
# changes are already present in your 'public' repo 
git format-patch -o ../patches/ $(git log --pretty=format:%H | head -n-1 | tail -1) 

cd ../public 
git checkout -b mystuff 1.0 
# Apply patches 
git am ../patches/* 
+0

謝謝。這聽起來像是我的問題的完美解決方案,但我一直得到這個錯誤:**已經存在索引 補丁失敗在0001初始提交** 我得到這個項目的每個文件。提供** git format-patch **和** git am **的工作示例會給蜜蜂帶來多大麻煩嗎? – user1832156

+1

@ user1832156我想你可能不得不忽略第一次提交,因爲該提交與你的'1.0'分支已經擁有的樹一樣。我更新了答案,試着這樣做。 – mgarciaisaia

+0

非常感謝您的幫助。我希望這對其他人有用。我得到這麼多*補丁不適用*錯誤,我終於放棄了。我甚至手動提交了第一次提交從我的本地回購,並調整您的示例從第二次提交開始,我仍然得到*補丁不適用*。既然這花了太多時間,我放棄了。但一般來說,你的答案是正確的。 – user1832156