svn 版本庫的遷移,只要svn 庫為標(biāo)準(zhǔn)目錄(trunk、branches、tags)按照git官方文檔基本都可以完成。
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)網(wǎng)站建設(shè)、成都手機(jī)網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、品牌網(wǎng)站制作、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺設(shè)計(jì)專才。
這里說說我所遷移的非標(biāo)準(zhǔn)目錄結(jié)構(gòu)的svn 庫
svn 庫里有part1目錄,part1目錄下又分為:code、UI等等,對于這種非標(biāo)準(zhǔn)目錄結(jié)構(gòu),主干就是part1,沒有分支,沒有標(biāo)簽。
而code下面又分為android、ios目錄,目錄內(nèi)才分trunk、tags、branch,這種目錄層級結(jié)構(gòu)……
對于以上非標(biāo)準(zhǔn)目錄結(jié)構(gòu),我采用的是先git svn到本地,并提交到git倉庫一個(gè)完整的版本,然后再將各目錄層級進(jìn)行拆分為獨(dú)立標(biāo)準(zhǔn)目錄結(jié)構(gòu)svn庫,然后再將各個(gè)庫git svn到本地,再提交到git庫。
說的可能有些繞,具體來操作下
全局假設(shè):
原svn庫地址:file:///home/svn1/
拆分后的標(biāo)準(zhǔn)庫地址:file:///home/svn2/$svn/
原svn庫對應(yīng)的git地址:https://git.example.com/dev/oldsvn.git
拆分后對應(yīng)的git地址:git@git.example.com/dev/$svn.git
注:$svn以具體目錄或庫名命名
目錄結(jié)構(gòu):
part1:
code:
android:trunk、tags、branches
ios:trunk、tags、branches
UI
將原svn庫克隆到本地:
對于標(biāo)準(zhǔn)目錄結(jié)構(gòu)含有其它自定義的目錄,也可采用此方式,只需將trunk設(shè)置為自定義的目錄名即可
git svn clone file:///home/svn/ \ --authors-flie=users.txt --no-metadata --trunk=part1 oldsvn
選項(xiàng)含義:
--authors-file:指定svn和git用戶對應(yīng)關(guān)系
--no-metadata:告訴 git svn
不要包括 Subversion 通常會(huì)導(dǎo)入的元數(shù)據(jù)
--trunk:主干名
注:這里沒有tags和branches所以不加 --tags --branch選項(xiàng),也不用-s 選項(xiàng)代替。非標(biāo)準(zhǔn)目錄結(jié)構(gòu),實(shí)際存在什么就指定什么,不存在不指定。
在clone過程中,可能會(huì)有含‘gc‘ 的提示,遇見則‘git gc --prune=now',然后'git svn fetch' 繼續(xù)clone
成功后,克隆的git 倉庫結(jié)構(gòu)對應(yīng)為:
code:
android:trunk、tags、branches
ios:trunk、tags、branches
UI
將此提交到git 倉庫,作為舊版本庫,便于查看原svn歷史提交修改。
git remote add origin https://git.example.com/dev/oldsvn.git
git push origin --all
對于多層級的目錄結(jié)構(gòu),如現(xiàn)在需要將part1:conde:ios 的庫遷移到git 上
首先,將ios 目錄拷貝到svn庫的根目錄,既與part1同級,目錄機(jī)構(gòu)如下:
part1:
code:
android:trunk、tags、branches
ios:trunk、tags、branches
UI
android:trunk、tags、branches
ios:trunk、tags、branches
UI:
這樣在通過‘git svn clone‘ 的時(shí)候,就可以指定trunk為ios了
git svn clone file:///home/svn/ \ --authors-flie=users.txt --no-metadata --trunk=ios --branch=branches --tags=tags ios
將標(biāo)簽變?yōu)楹线m的 Git 標(biāo)簽
$ cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/ $ rm -Rf .git/refs/remotes/origin/tags
這會(huì)使原來在 remotes/origin/tags/
里的遠(yuǎn)程分支引用變成真正的(輕量)標(biāo)簽。
接下來,將 refs/remotes
下剩余的引用移動(dòng)為本地分支:
$ cp -Rf .git/refs/remotes/* .git/refs/heads/$ rm -Rf .git/refs/remotes
將你的新 Git 服務(wù)器添加為遠(yuǎn)程倉庫并推送到上面
git remote add origin git@git.example.com/dev/ios.git git branch -r git push origin --all
在變更svn目錄的過程中可能會(huì)耗費(fèi)很多時(shí)間,因此也可保持原svn目錄結(jié)構(gòu),進(jìn)行克隆
git svn clone file:///home/svn/part1/code/android \ --authors-flie=users.txt --no-metadata -T trunk -t tags -b branches android
使用此方式,可能會(huì)出現(xiàn)未知問題,我遇到的是
fatal: refs/remotes/trunk: not a valid SHA1
以上問題尚未解決
標(biāo)題名稱:svn遷移至git
轉(zhuǎn)載來于:http://chinadenli.net/article8/giipop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、域名注冊、電子商務(wù)、Google、搜索引擎優(yōu)化、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)