Git 仓库迁移到 SVN 仓库

法一

使用 git svn clone 建立本地 Git 仓库到 SVN 仓库的连接。

在 SVN 仓库中创建托管文件夹

首先在 SVN 中创建一个项目文件夹,用于托管 Git 仓库中分支中的代码。

svn mkdir "svn://localhost:1234/svn/project" -m "create project folder"

此时 SVN 中的提交日志为:

svn: cpf

创建中转仓库

初始化一个 Git 仓库,并将 SVN 中预先创建的项目文件夹克隆同步到中转仓库。

git svn clone "svn://localhost:1234/svn/project" "svn2git"

中转仓库链接迁移的 Git 仓库

cd "svn2git"
git remote add bridge "P:\temp\git repo"
git fetch bridge

此时中转仓库存在两条分支:

# SVN仓库中的分支,记录SVN仓库的提交记录
master: cpf 
# 被迁移的Git仓库分支,记录Git仓库的提交记录
bridge/master: A --- B --- C

合并中转仓库中的提交记录

创建 Git 仓库的工作副本 (bridge/master) 并将其历史记录 (import) 放在 SVN 文件夹的历史记录 (master) 之上。

git checkout -b import bridge/master
git rebase -i master

合并后的分支:

master: cpf
import: cpf --- A --- B --- C
bridge/master: A --- B --- C

注:可以在git rebase -i master的时候编辑历史记录、过滤分支、重写提交等。

合并提交记录

将合并完成的历史记录同步到 master 分支上。

git checkout master
git merge --ff-only import

迁移 Git 仓库到 SVN 仓库

可以通过 git log查看当前的分支的提交记录。

git svn dcommit --localtime

法二

使用 git svn init 建立本地 Git 仓库到 SVN 仓库的连接。

本地 Git 仓库链接 SVN 仓库

git svn init "svn://localhost:1234/svn/project"

拉取 SVN 仓库的更新

git svn fetch

拉取完成可以使用 git branch -a 看一下分支。

迁移 Git 仓库到 SVN 仓库

git svn dcommit --localtime

问题1:本地还有未提交的更改 —— git commit 提交下

问题2:head历史没有上游svn信息 —— 为其添加父级信息

  • git show-ref —— 记录下remote/git-svn的commit值,其实是远程项目分支的最后一次commit值[parentcommit]

  • git log --pretty=oneline master | tail -n 1 —— 记录下第一次commit值[localfirstcommit]

  • git replace --graft [localfirstcommit] [parentcommit] —— 设置父级commit

问题3:本地修改删除的文件夹,svn 上会保留空文件夹 —— 添加选项设置 --rmdir

  • 实在没办法删除空文件夹,可以在svn服务上删掉后,本地git svn rebase。
  • 需要原来文件夹中存在内容,然后删除内部文件及文件夹时,–rmdir才会生效,以前的空文件夹时不会自动删除 —— 这个可能也是为了保证svn可以添加空文件夹。

.gitignore处理

  • git svn show-ignore > ./git/info/exclude —— 这个好像是针对有svn忽略处理的情况,我们可以忽略这一步

  • 将本地.gitignore文件里的内容添加到./git/info/exclude中 —— 具体配置内容可以网络上,或者如我一样直接使用visual studio自动生成的配置内容

  • 删除本地的.gitignore文件 —— 这样避免svn项目中含有.gitignore文件

git svn rebase

  • 拉取最新项目
  • 建议每次commit之前拉取最新内容
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值