SVN 遷移到 Git 實操步驟

  • 在代碼托管系統(tǒng)上創(chuàng)建空白倉庫(不進(jìn)行初始化)
git@my-git-server:myrepository.git
  • 在 workspace 導(dǎo)出 SVN 提交記錄的用戶列表
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' >users.txt

編輯 users.txt,映射 Git 用戶數(shù)據(jù),格式為

username = username <email>
  • 從 SVN 服務(wù)器克隆倉庫
git svn clone --authors-file=users.txt --no-metadata --stdlayout --prefix="" http://my-project.googlecode.com/svn/ my_project
  • 刪除 peg-revision 分支(非必須)
for p in $( git for-each-ref --format='%(refname:short)' | grep "@" ); do
    git branch -D -r $p
done
  • 將 SVN 標(biāo)簽(被 git svn 識別為遠(yuǎn)程分支)轉(zhuǎn)換為 Git 標(biāo)簽
for t in $( git for-each-ref --format='%(refname:short)' refs/remotes/tags ); do
    git tag ${t/tags\//} $t
    git branch -D -r $t
done
  • 將剩余遠(yuǎn)程分支轉(zhuǎn)換為本地分支
for b in $( git for-each-ref --format='%(refname:short)' refs/remotes ); do
    git branch $b refs/remotes/$b
    git branch -D -r $b
done
  • 刪除 trunk 分支(非必須)
git branch -d trunk
  • 添加遠(yuǎn)程倉庫,推送所有分支與標(biāo)簽
git remote add origin git@my-git-server:myrepository.git
git push origin --all
git push origin --tags

參考:
https://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。