最近項(xiàng)目要求需要把項(xiàng)目從svn遷移到git,并保留原來的一些提交修改記錄。在此做個(gè)記錄,說一下遷移步驟:
網(wǎng)上有很多的教程,基本步驟差不多大多數(shù)都可以搞定,但是在遷移過程中也會(huì)遇到一些坑。
可以有兩種遷移辦法:
1、不需要以前的提交紀(jì)錄:這種最簡(jiǎn)單,只需在git或是gitLab上創(chuàng)建自己的倉庫;然后使用git clone命令獲取遠(yuǎn)程倉庫到本地;將現(xiàn)在的工程拖放入倉庫內(nèi);使用git add . & git commit -m "注釋" & git push origin master 就可以將本地的工程提交到git遠(yuǎn)程倉庫與組內(nèi)人員共享。
2、完全遷移,包括以前的所有提交記錄:
(1)羅列出當(dāng)前倉庫里的svn用戶的信息,并重定向到user.txt中
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > users.txt
ps:這個(gè)步驟有可能會(huì)出錯(cuò),得到的users.txt里的信息不完全,只有用戶名,么有相對(duì)應(yīng)的郵箱,這樣在下邊的步驟沒法執(zhí)行
我得到的格式:yourname=
正確格式:yourname=yourname<youremail>
只有格式正確后才可有效執(zhí)行步驟(2)
(2)將倉庫克隆到本地
git svn clone svn地址 --authors-file=users.txt --no-metadata
(3)從svn獲取更新
git svn fetch
git checkout master
git svn rebase
(4)處理分支及標(biāo)簽
標(biāo)簽
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/origin/tags
分支
cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes
(5)添加git遠(yuǎn)程倉庫的地址
git remote add origin git@my-git-server:yourProjectName.git
(6)推送到遠(yuǎn)程
git push origin --all
至此就把svn的工程全部遷移到git服務(wù)器,但是打開git發(fā)現(xiàn)里邊有兩個(gè)分支,分別是master和git-svn,以前的提交記錄早期的大都是在git-svn這個(gè)鏡像上,并沒有全部在master上,此處沒有去深究。