git學習——svn代碼同步到git(3)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM