git-svn是一支讓git愛用者也可以存取svn rep的好工具!!
不過使用上會有一些問題,如果不小心,或是不熟的話,遇到很麻煩Orz
使用方法可以參考:
從svn clone回來之後記得要做
$ git reset --hard remotes/trunk
因為理論上remotes/trunk這個分支就是svn中trunk的最新結果
這個感覺是將我們的參考點設在這邊 (有錯請指正
**對應到svn update
$ git svn fetch
抓取svn端的最新版本,但是本地端的branch尚未更新
也就是說目前工作的branch還看不到剛剛svn的更新
如果先checkout到remotes/trunk的話,應該是可以看到
因此我們要把trunk那邊的更動合併進來,就要下rebase
$ git svn rebase
如果看到錯誤訊息,可能就是沒有做最前面那一步 Orz
Unable to determine upstream SVN information from working tree history
簡單的解法就是砍掉重練,有空我再試試其他解法 囧
如果你有更動,已經ci到git rep,但是沒有ci到svn上的話,沒有衝突的話
rebase是不會有問題的,git svn會幫你merge,
然後log會介於你ci到git的log跟上次ci到svn的log之間
950f68 fn v3 <-- 本地rep尚未ci到svn的log
549c69 fn v2 <-- 本地rep尚未ci到svn的log
ebd3bb main v6 <-- 這次svn update的log
9e0ff5 main v5 <-- 上次svn的log
850c60 main v4
如果你有更動,但是還沒ci的話,rebase會出現"xxx: needs update的錯誤訊息
xxx應該是你那個已修改的檔案
這時候要先將變更做stash存起來、再rebase、再stash pop出來
$ git stash
$ git svn rebase
$ git stash pop
然後你就會看到他們自動merge在一起了!!! lol
**對應到svn commit
$ git svn dcommit
先檢查跟trunk版本的差別的話,要下
$ git diff remotes/trunk
因為diff是跟本地rep比較而已
然後做完dcommit之後,他會將所有尚未ci到svn的通通ci上去,
以上面的log來說,就是將fn v2, fn v3通通ci上去svn,下次svn up的人就會發現
跳了2個版本這樣
下次來研究一下有分支怎麼做 @_@