我的git repo正在跟蹤SVN回購。我的一個git分支,我們稱其爲'latest_tag',指向源代碼,因爲它在最新的SVN標籤中。當創建一個新的SVN標籤時,我想合併'latest_tag'中的更改。當我嘗試這樣做時,git抱怨合併衝突,好像它不瞭解SVN歷史。git丟失SVN標籤之間的歷史記錄
SVN回購正在使用標準結構。
trunk/ tags/ - v1 branches/
我以通常的方式創建了我的git repo。
git svn clone --stdlayout url_to_svn_repo git_repo
我爲每個SVN標籤和'latest_tag'分支創建了git分支。
git branch v1 tags/v1
git branch latest_tag v1
當一個新的標籤在SVN回購的增加(例如V2),我可以在我的git回購導入。
git svn fetch
git branch v2 tags/v2
但是,如果我嘗試將'latest_tag'分支從v1快速轉發到v2,則出現錯誤。
$ git checkout latest_tag
$ git merge v2
Auto-merging source.py
CONFLICT (add/add): Merge conflict in source.py
Automatic merge failed; fix conflicts and then commit the result.
當我看到衝突,它看起來像混帳認爲是無關的V1和V2之間的所有變化,但他們有一個共同的歷史。
這是一個重現問題的最小化腳本。
# Create the svn repo and its first tag.
svnadmin create svn_repo/
svn checkout "file:///${PWD}/svn_repo/" svn_working_copy
(cd svn_working_copy ; mkdir -p trunk tags branches ; svn add * ; svn commit -m 'Initialize SVN repo' ; cd trunk ; echo "print 'Hello v1'" >source.py ; svn add * ; svn commit -m 'Development for v1' ; cd .. ; svn cp trunk/ tags/v1 ; svn commit -m 'Tag v1' ; sed --in-place 's/v1/v2/' trunk/* ; svn commit -m 'Development for v2' ;)
# Create a git repo from the svn repo.
git svn clone --stdlayout "file://${PWD}/svn_repo/" git_repo
(cd git_repo ; git branch v1 tags/v1 ; git branch latest_tag v1)
# Create tag v2 in svn.
(cd svn_working_copy ; svn cp trunk/ tags/v2 ; svn commit -m 'Tag v2')
# Merge or rebase 'latest_tag' git branch on svn tag v2.
(cd git_repo ; git svn fetch ; git branch v2 tags/v2 ; git checkout latest_tag ; git merge v2)
編輯 我確認混帳似乎也沒有兩個SVN標籤之間的共同歷史感。
$ git log --oneline master
bd050cd Development for v2
373f808 Development for v1
3b92703 Initialize SVN repo
$ git log --oneline remotes/tags/v1
31f9fff Tag v1
3b92703 Initialize SVN repo
$ git log --oneline remotes/tags/v2
b717759 Tag v2
3b92703 Initialize SVN repo
如果git瞭解SVN的歷史,它會輸出這個。
$ git log --oneline remotes/tags/v1
31f9fff Tag v1
373f808 Development for v1
3b92703 Initialize SVN repo
$ git log --oneline remotes/tags/v2
b717759 Tag v2
bd050cd Development for v2
373f808 Development for v1
3b92703 Initialize SVN repo