從 svn 搬 commit 到 git repo
以下介紹在各種情況下,如何複製一個想要的 commit 到目前的 branch
一、同一個 repo, 不同的 branch
直接使用 cherry-pick
二、不同的兩個 git repo 之間
ref: https://yodalee.blogspot.com/2017/03/git-patch.html
-
把想搬的 commit 生成 patch
$ git format-patch -1 <commit> # one commit $ git format-patch -n <commit> # <n> commit $ git format-patch <commit> # commit to head
-
把所有 .patch 檔搬到想要 apply 的 repo,然後執行:
$ git am *.patch
-
如果碰到衝突就會停下來,想要處理的話就要:
$ git apply --reject xxx.patch
-
把 .rej 檔的地方修改好後:
$ git add -u # only adds currently tracked files $ git am --continue
最後就完成了
三、從 svn 搬 commit 到 git repo
如果你的工作環境用的是 svn,但是又想把 commit 搬到 local 的 git
也可以使用 patch 的方式來操作
-
從 svn 生成 patch
$ svn diff http://your-svn-site/... -r <revision - 1>:<revision>
-
可以把前面的結果導出到檔案,然後在 git repo 執行 patch command
$ patch --binary --no-backup-if-mismatch -p0
可以參考下面這個範例
!!!
但是,麻煩的事情出現了
如果你是用 Windows 系統的 svn,Cygwin 的 git
autocrlf 的問題又會跑出來亂了 (different line endings)
目前我還不知道怎麼處理,期待有一天突然領悟,那我就可以再整理一篇