git与svn之间项目迁移,并保存提交记录

该文提供了一套步骤,包括使用GitBash和命令如`gitsvninit`、`gitsvnfetch`、`gitrebase`和`gitsvndcommit`来将Git仓库迁移到SVN。在过程中可能遇到的冲突和错误,如配置错误或rebase失败,也给出了解决方法。另外,文章还提到了使用TortoiseGit进行rebase和dcommit的辅助操作。对于从SVN迁移到Git的情况,文章指出需要处理重复定义的branches和tags问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接

下面附上我个人测试过的可行步骤
一、git迁移至svn
在这里插入图片描述
1、打开Git Bash然后进入需要迁移的Git库目录下。
在这里插入图片描述
2、

//git svn init 需要迁移至的svn库地址 -s
 - git svn init https://192.168.1.1/git-svn -s
 - git svn fetch
 - git rebase origin/trunk
 - git svn dcommit

在这里插入图片描述
查看svn库日志便会发现所有git版本和提交信息都已经迁移至svn
在这里插入图片描述
3、可能遇到的问题

  • 可能会出现如下提示框,输入t点击ok即可。

在这里插入图片描述

  • 如果你不小心写错了init的地址,想重新用
git svn init https://192.168.1.1/git-svn -s

指令的话,会提示如下问题:
在这里插入图片描述
这时候如果要修改地址可以找到隐藏文件夹.git
在这里插入图片描述
打开config文件,修改下面位置然后保存即可。
在这里插入图片描述

  • rebase失败
    在这里插入图片描述
    这里将冲突文件删掉,然后输入
git rebase --continue

在这里插入图片描述

  • dcommit 失败
    在这里插入图片描述
    出现这个的原因是重复定义了branches和tags或其他的,如下图
    在这里插入图片描述

删除掉重复的即可。
//-------------------------------------------------分隔符----------------------------------------------------
在这里插入图片描述
1、在使用git svn init https://192.168.1.1/git-svn -s成功后。
2、使用TortoiseGit来进行rebase和decommit,等待提交完成即可。
在这里插入图片描述
在这里插入图片描述

二、svn迁移至git

### 将SVN仓库迁移Git保留完整提交历史 #### 准备工作 在开始迁移之前,确保已经安装了必要的工具,如 Git 和 Subversion 客户端。还需要准备一个包含所有 SVN 提交者及其对应 Git 用户名的文件 `user.txt`。 对于获取 SVN 使用的作者名字列表,在 SVN 项目根目录下可以使用如下命令来生成此文件: ```bash svn log --xml --quiet | grep author | sort -u | \ perl -pe 's/.*>(.*?)<.*/$1 = /' ``` 上述命令会提取所有的唯一作者名称,将其格式化为适合用于后续操作的形式[^4]。 #### 创建新的Git版本库 创建一个新的空 Git 版本库作为目标存储位置。这可以通过简单的初始化命令完成: ```bash mkdir projectname && cd $_ git init . ``` #### 执行实际的数据迁移 利用 `git-svn` 工具来进行数据迁移,该工具允许从 SVN 导入整个项目提交历史到新建立的 Git 库中。执行下面的命令以启动克隆过程(假设已准备好 authors 文件): ```bash git svn clone http://ip地址/projectname --no-metadata --authors-file=../user.txt projectname cd projectname ``` 注意:如果项目非常庞大或者拥有很长的历史记录,则这一阶段可能会花费相当长的时间甚至数天才能完成全部下载和转换工作[^3]。 #### 添加远程Git仓库之关联 一旦本地 Git 仓库包含了来自 SVN 的所有更改之后,就可以通过添加远程仓库 URL 来设置推送目的地: ```bash git remote add origin https://github.com/user/repo.git ``` 这里替换为你自己的 GitHub 或其他托管服务上的私有或公共仓库链接。 #### 推送至远程Git仓库 最后一步就是将本地分支推送到远端服务器上去: ```bash git push -u origin master ``` 这样就完成了由 SVNGit 的整体迁移流程,且成功保存了原有的提交历史信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值