實(shí)操 Svn 遷移到 Git
來源:segmentfault
不管是軟件工程師,還是硬件工程師,基本都會(huì)牽涉到版本管理的問題。市面上版本管理的工具很多,但大家最熟悉的可能還是Svn和Git了。
以前很多工程師都習(xí)慣使用SVN,隨著Git工具的逐漸成熟和強(qiáng)大,很多公司就開始轉(zhuǎn)移使用Git了。。。
本文分享一篇“實(shí)操 Svn 遷移到 Git”,來源:
導(dǎo)出 svn 工程
首先,我們需要git-svn:
$ sudo yum install git-svn
or
$ sodu apt-get install git-svn
原理上,就是使用git svn clone ...命令。如果你只是簡單的執(zhí)行這個(gè)命令的話:
$ git svn clone http://rdsvn.company.net/some_mid_path/Branches/main
那么我們只是將主分支及其 log 取到了本地,但是其他的分支并沒有。如果要把所有的分支都 checkout 出來的話,需要用到--trunk、--tags、--branches等選項(xiàng)。
需要注意的有三點(diǎn):
除了
trunk單詞是單數(shù)之外,其他的選項(xiàng)單詞,請(qǐng)注意是復(fù)數(shù)。前者就是主分支的目錄了,而后者表示的則是對(duì)應(yīng)各個(gè)分支 / 標(biāo)簽的上層目錄。Git-svn 會(huì)將該目錄下的所有子目錄視為一個(gè)獨(dú)立的分支 / 標(biāo)簽進(jìn)行導(dǎo)出。這幾個(gè)選項(xiàng)指定的都是
相對(duì)路徑,相對(duì)于你在git svn clone后面緊跟著的路徑的位置。所以請(qǐng)不要在這些選項(xiàng)里面指定諸如 “http://” 開頭的絕對(duì)地址。除了 trunk 之外,其他幾個(gè)相關(guān)選項(xiàng)可以重復(fù)指定。如果你的分支 / 標(biāo)簽分別在 svn 目錄上的不同文件夾下,可以多次指定。
于是,對(duì)應(yīng)我們的實(shí)際情況,git-svn 命令是這樣的:
git svn clone http://rdsvn.company.net/some_mid_path/ \ # 注意這里并沒有把主分支的路徑寫完整
--trunk="Branches/main" --tags="Branches"
稍等一會(huì)兒,就可以看到整個(gè) svn 的主分支及分支都被導(dǎo)出來了,一顆賽艇!
分支處理
執(zhí)行git branch -a可以看到相應(yīng)的分支已經(jīng)按照我們指定的選項(xiàng)建立起來了。我的實(shí)際情況,分支是這樣的:
trunk
tags/main_tag_25189
tags/main_tag_28141
tags/main_tag_28576
這幾個(gè)分支都被視為 Git 的遠(yuǎn)程分支,你的本地倉庫暫時(shí)是空的??梢允褂?code style="box-sizing: border-box;font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-size: 14px;color: rgb(232, 62, 140);overflow-wrap: break-word;">git checkout -b ...來將這幾個(gè)分支拉到本地。
講道理,svn 上的分支命名和 git 上的分支命名規(guī)則未必是一致的,因此這個(gè)時(shí)候你會(huì)想要重新命名分支。我的建議是這么操作:
在這個(gè)倉庫中,首先把這幾個(gè)虛擬的遠(yuǎn)程分支 checkout 到本地保存下來,這樣可以保存 change log
向服務(wù)器上傳主分支,一般分支名就是 master
將復(fù)制出來的其他分支,推到 git 服務(wù)器上,按照你希望的規(guī)則進(jìn)行命名
上傳到 git 服務(wù)器
首先要在 git 服務(wù)器上創(chuàng)建一個(gè)空的工程,比如 “git@rdgit.company.net/some_mid_path/some_group/firmware.git”
然后在本地倉庫中執(zhí)行:
git remote add origin git@rdgit.company.net/some_mid_path/some_group/firmware.git
然后將主分支上傳:
git push origin trunk:master
其他的分支也是利用這個(gè)語句創(chuàng)建新分支上傳。
完成之后,在 git 服務(wù)器上就可以看到完整的 change log 以及分支變化情況啦。
關(guān)于空目錄
其實(shí)遷移的時(shí)候還需要注意一個(gè)問題,那就是 svn 支持空目錄的版本控制,但是 git 不支持。
導(dǎo)出 svn 之后,最好對(duì)比一下原始的 svn 工程內(nèi)是否有空目錄。如果有,那么你需要手工(或者寫腳本)在導(dǎo)出的 git 工程中創(chuàng)建這些目錄,并且在目錄中建立一個(gè) “.gitkeep” 文件(這是約定俗成的做法),并且將這些文件git add .gitkeep,以加入 git 的版本控制。這樣就以迂回的方式通過 git 版本控制了目錄。
長按前往圖中包含的公眾號(hào)關(guān)注
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!





