git svn 同步
最近接手的項目代碼放在svn,但是svn推送分支的代價太高了,每個分支目錄都是一次全拷貝,所以項目轉用git進行版本管理。
最傻的方法是新建git分支,將svn的代碼作為源代碼重新提交,但是這種方法沒辦法獲取到svn的commit記錄,這對版本追蹤是不可忍的。所以放棄。
第二種方式,是將svn的分支連同commit記錄一起merge到git,然后再用git進行版本管理。
參考資料:
1、http://blog.csdn.net/ouyang_peng/article/details/76220621
使用場景 :將已有的SVN項目遷移至git
場景一: 從舊SVN項目同步代碼至新的git項目
注意:
該步驟只有第一次遷移的時候才需要做,一旦遷移成功,所有svn的代碼都應該由git更新,不應該直接在svn上提交,否則版本庫會亂
具體步驟
1、 在git 創建對應的project
2、 clone git項目
3、 在.git/config中添加svn-remote,創建命令如下。
[svn-remote "svn"]
url = http://svn.*****.com/***********/branches/release
fetch = :refs/remotes/git-svn-release
4、 第三步中創建了一個名為svn的git-svn同步分支,該分支為所有其他git分支連接SVN代碼庫的橋梁,只有當需要將代碼同步至SVN時才會往該分支合代碼。

5、 從空的svn遠程庫中做初始化fetch,並將其作為一個新分支checkout
git svn fetch svn
git checkout -b svn git-svn-release
6、git show-ref命令查看分支情況

到有個遠程分支remotes/git-svn-release。
7、 假設我們所有的開發分支最后都要合到develop分支上,我們就用develop分支和同步分支做交互。
8、 checkout至develop分支,將svn分支merge進develop分支,這樣SVN的代碼庫就原封不動連同日志一起在git中建立了起來。
git checkout develop
git merge svn --no-ff
git commit
場景二: 在已經使用git開發的情況下建立git到svn的同步機制
如果上述場景一已經做完,作為一個開發,我現在只能拉到develop分支,我如何建立起這么一套同步機制呢?
重做場景一中的前8步,這樣使得我們本地有一個svn(和上面的並不是一個分支,沒有聯系),與之建立聯系的是遠程svn服務器上的git-svn分支
此時的develop分支和svn分支是兩條從一個根節點出發的線,這個跟節點就是場景一中第一次將 svn merge入develop的這次提交。
雖然這兩個分支最后當前的文件內容應該是相同的,但是git並不會這么認為,它會覺得這是兩條截然不同的分支,為了能夠讓develop和svn建立起關系,需要再將develop和svn合並,把develop合入svn。
git checkout svn
git merge develop --no-ff
場景三,將改動提交到svn
已經建立git到svn的同步機制的情況下。
git checkout svn
git svn dcommit
