29.15、Svn 转 Git
本章节讲说明如何将 Svn 完整的 转到 Git中
可使用框架提供的自动化脚本
$SoucePath = Read-Host "请输入仓库目录,可空";
$SvnAddress = Read-Host "请输入Svn地址,可空";
$GitAddress = Read-Host "请输入Git地址,可空";
# 记录当前脚本目录
$pspath=pwd;
if($SvnAddress -eq $null -or $SvnAddress -eq "" -or $GitAddress -eq $null -or $GitAddress -eq "")
{
echo "sync svn to git.";
if($SoucePath -eq $null -or $SoucePath -eq "")
{
throw "[-SoucePath] can not be empty.";
}
# 进入源码目录
pushd $SoucePath;
# 如果 local-git-svn 分支存在才执行这条命令
git branch -d local-git-svn;
# 创建分支并切换到 local-git-svn
git checkout -b local-git-svn refs/remotes/git-svn;
# 拉取SVN最新修改代码
git svn fetch;
# 切换回主分支
git checkout master;
# 再删除分支 local-git-svn
git branch -d local-git-svn;
# 再重写创建分支并切换到 local-git-svn
git checkout -b local-git-svn refs/remotes/git-svn;
# 切换回主分支
git checkout master;
# 合并最新代码到 master 分支
git merge local-git-svn;
# 推送到远程
git push -u origin master;
}
else
{
write-warning "The first time sync svn to git.";
if($SvnAddress -eq $null -or $SvnAddress -eq "")
{
throw "[-SvnAddress] can not be empty.";
}
if($GitAddress -eq $null -or $GitAddress -eq "")
{
throw "[-GitAddress] can not be empty.";
}
# 克隆svn项目
git svn clone $SvnAddress --no-metadata --no-minimize-url --no-minimize-url;
# 添加远程git地址
git remote add origin $GitAddress;
# 提交到git
git push -u origin master -f;
}
# 回到脚本目录
pushd $pspath;
使用说明
保存这个脚本为:svntogit.ps1
然后打开 PowerShell
运行这个脚本
& "./svntogit.ps1"
如果你是首次运行,需要提供 Svn
和 Git
地址
如果已经同步过了,只需要提供 Git 本地目录地址即可,其他的为空。
自己手动操作(不推荐)
首次将Svn转Git
git svn clone 远程SVN地址 --no-metadata --no-minimize-url --no-minimize-url 项目名称
git remote add origin http://dev.alliantplans.com:3000/hoa/MemberPortal.git
git push -u origin master -f
特别注意,只有首次才会执行上述命令!!!!!!
后续继续同步SVN到Git
# 如果 local-git-svn 分支存在才执行这条命令
git branch -d local-git-svn
# 创建分支并切换到 local-git-svn
git checkout -b local-git-svn refs/remotes/git-svn
# 拉取SVN最新修改代码
git svn fetch
# 切换回主分支
git checkout master
# 再删除分支 local-git-svn
git branch -d local-git-svn
# 再重写创建分支并切换到 local-git-svn
git checkout -b local-git-svn refs/remotes/git-svn
# 切换回主分支
git checkout master
# 合并最新代码到 master 分支
git merge local-git-svn
# 推送到远程
git push -u origin master
常见错误
这是 Git 2.27.0 版本才有的,解决只需要下载 前一个版本即可:https://github.com/git-for-windows/git/releases/download/v2.26.0.windows.1/Git-2.26.0-64-bit.exe
svn: E235000: In file 'subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_p
l.c' line 1666: assertion failed (get_current_pool_cb != NULL)
0 [main] perl 1921 cygwin_exception::open_stackdumpfile: Dumping stack tra
ce to perl.exe.stackdump
最后更新于