SVN到Git的迁移

来源:互联网 发布:redis zadd json 编辑:程序博客网 时间:2024/04/29 04:30

!/bin/bash

#SVN到Git的迁移,网上有很多代码,ProGit这本书上也有,但是,尝试过之后,有些项目是可以完整映射过去但是有些不行。在使用ProGit上的代码时,会提示没有找到.git/refs/remotes/tags/文件,这是一个例子,很多情况是这样,然后进入git svn clone的文件夹下面命令 git branch -a 是可以看到 .git/refs/remotes/tags/ 其中*号对应相关的tag。经过测试下面的代码可以达到这些功能:每次提交的作者,以及注释,都可以保存,但是邮箱的名字不能完全保存,只能保存邮箱的用户名。所有的branch,trunk,tags都完全映过去。#

还有不要首先推送tag,如果先推送tag就会在GitLab出现500错误,但是可以看到确实推送成功。可能是基于现有branch后才有tag的逻辑。这里我只是猜测。可能Git可以检测出来不符合逻辑。


proname=projectname

git svn clone http://yoursvnrepository/$proname/code/trunk #here proname
cd trunk
git remote add origin git@servername:louis/$proname.git #here proname
git push -u origin master:master
cd ..
rm -rf trunk

git svn clone http://yoursvnrepository/$proname/document/ #here proname
cd document
git remote add origin git@servername:louis/$proname.git #here proname
git push origin master:document
cd ..
rm -rf document


for i in tag1 tag2 tag3 #here put tags name
do
git svn clone http://yoursvnrepository/$proname/code/tags/$i
cd $i
git remote add origin git@servername:louis/$proname.git #here replace with real project name
git tag -a "$i" -m "commit $i"
git push origin $i
cd ..
rm -rf $i
echo "tag $i transferred"
done


for j in branch1 branch2 branch3#here put branches name
do
git svn clone http://yoursvnrepository/$proname/code/branches/$j
cd $j
git remote add origin git@servername:louis/$proname.git #here replace with real project name
git push origin master:$j
cd ..
rm -rf $j

0 0