2016年3月29日 星期二

git 使用 svn repository

Git 是非常好用的程式碼管理工具, 但是 Subversion 應該才是使用率最高的 VCS
Git 提供了非常好用的功能讓使用者可以在已經用 Subversion 管理的專案中使用 Git
也就是 git svn command

git svn 就是在 local 端使用 git 作為 client 並將 change 提交到 svn repo
可以在 local 享有 git 的功能
但是因為 remote 是 svn, 所以一些跟 remote git 相關的功能無法使用


從 svn 建立 git repository

必須先建立一個可以用 git 提交的 local repo
可以用 git svn clone 從 svn 上抓取檔案下來

git svn clone svn-repo-url -T trunk -b branches -t tag

如果沒有現存的 svn repo 的話, 可以先建立一個空的 svn repo 再做clone
不過建立空的 svn repo 時最好先在裡面放一個檔案
否則用 git clone 下來之後可能會發生無法 push commit 到 svn 的情況

假如是要 clone svn 下面一個 subdirectory 的話
可能會發現檔案沒抓下來, clone 完的 repo 是空的
這時不要加上 -T trunk... 參數
就可以成功 clone


加入多個 svn remote repository

要從多個 svn repo sync code 的話
可以用 git svn 新增 remote svn repo

git config --add svn-remote.newbranch.url https://svn/path_to_newbranch/
git config --add svn-remote.newbranch.fetch :refs/remotes/newbranch


然後可以從新的 svn repo 抓取

git svn fetch newbranch [-r<rev>]

抓取完建立 local branch

git checkout -b local-newbranch newbranch


其他

有時候用 git merge conflict 的時候會發現檔案一樣只是 new line 字元不一樣
一個用 \r\n 一個用 \n
可以在 merge 的時候讓 git 忽略換行字元

git merge master  -s recursive -Xignore-space-at-eol

如果是 binary file conflict 的時候
可以選擇是要使用哪個版本的 binary file

git checkout --ours file-path
git checkout --theirs file-path

Rerefence
Git 與其他系統 - Git 與 Subversion

沒有留言:

張貼留言