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個版本這樣

下次來研究一下有分支怎麼做 @_@

koukaipan 發表在 痞客邦 PIXNET 留言(0) 人氣()