SVN到Git的迁移

16 篇文章 0 订阅
4 篇文章 0 订阅

!/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值