您好,登錄后才能下訂單哦!
svn 版本庫的遷移,只要svn 庫為標準目錄(trunk、branches、tags)按照git官方文檔基本都可以完成。
這里說說我所遷移的非標準目錄結構的svn 庫
svn 庫里有part1目錄,part1目錄下又分為:code、UI等等,對于這種非標準目錄結構,主干就是part1,沒有分支,沒有標簽。
而code下面又分為android、ios目錄,目錄內才分trunk、tags、branch,這種目錄層級結構……
對于以上非標準目錄結構,我采用的是先git svn到本地,并提交到git倉庫一個完整的版本,然后再將各目錄層級進行拆分為獨立標準目錄結構svn庫,然后再將各個庫git svn到本地,再提交到git庫。
說的可能有些繞,具體來操作下
全局假設:
原svn庫地址:file:///home/svn1/
拆分后的標準庫地址:file:///home/svn2/$svn/
原svn庫對應的git地址:https://git.example.com/dev/oldsvn.git
拆分后對應的git地址:git@git.example.com/dev/$svn.git
注:$svn以具體目錄或庫名命名
目錄結構:
part1:
code:
android:trunk、tags、branches
ios:trunk、tags、branches
UI
將原svn庫克隆到本地:
對于標準目錄結構含有其它自定義的目錄,也可采用此方式,只需將trunk設置為自定義的目錄名即可
git svn clone file:///home/svn/ \ --authors-flie=users.txt --no-metadata --trunk=part1 oldsvn
選項含義:
--authors-file: 指定svn和git用戶對應關系
--no-metadata: 告訴 git svn
不要包括 Subversion 通常會導入的元數據
--trunk: 主干名
注:這里沒有tags和branches所以不加 --tags --branch選項,也不用-s 選項代替。非標準目錄結構,實際存在什么就指定什么,不存在不指定。
在clone過程中,可能會有含‘gc‘ 的提示,遇見則‘git gc --prune=now',然后'git svn fetch' 繼續clone
成功后,克隆的git 倉庫結構對應為:
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
對于多層級的目錄結構,如現在需要將part1:conde:ios 的庫遷移到git 上
首先,將ios 目錄拷貝到svn庫的根目錄,既與part1同級,目錄機構如下:
part1:
code:
android:trunk、tags、branches
ios:trunk、tags、branches
UI
android:trunk、tags、branches
ios:trunk、tags、branches
UI:
這樣在通過‘git svn clone‘ 的時候,就可以指定trunk為ios了
git svn clone file:///home/svn/ \ --authors-flie=users.txt --no-metadata --trunk=ios --branch=branches --tags=tags ios
將標簽變為合適的 Git 標簽
$ cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/ $ rm -Rf .git/refs/remotes/origin/tags
這會使原來在 remotes/origin/tags/
里的遠程分支引用變成真正的(輕量)標簽。
接下來,將 refs/remotes
下剩余的引用移動為本地分支:
$ cp -Rf .git/refs/remotes/* .git/refs/heads/$ rm -Rf .git/refs/remotes
將你的新 Git 服務器添加為遠程倉庫并推送到上面
git remote add origin git@git.example.com/dev/ios.git git branch -r git push origin --all
在變更svn目錄的過程中可能會耗費很多時間,因此也可保持原svn目錄結構,進行克隆
git svn clone file:///home/svn/part1/code/android \ --authors-flie=users.txt --no-metadata -T trunk -t tags -b branches android
使用此方式,可能會出現未知問題,我遇到的是
fatal: refs/remotes/trunk: not a valid SHA1
以上問題尚未解決
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。