SVN迁移至GitLab,并附带历史提交记录

Git在代码管理方面比SVN有更多的优势,如代码审查,分支和合并。

一、准备工作

  1. 安装Git环境,配置本地git账户信息:
git config --global user.name "XXX"
git config --global user.email "XXX@mail.com"

可通过命令git config -l 查看结果

  1. SVN的用户名和密码(同步代码时需要输入)
  2. svn账号与git账号映射,新建文件 userinfo.txt,左侧是SVN的账号,右侧是git账号信息,用=号连接:
svn1=git1<git1@mail.com>
svn2=git2<git2@mail.com>
svn3=gitx<gitx@mail.com>

注意:

  • 需要将涉及到的同步记录中的用户都做映射,否则在同步时可能会报错
  • 对于无法对应的人员,如离职人员,有SVN账号,但是没有现在的GIT账号,保险起见,可以采用无关紧要的账号进行对应,或者单独建一个账号也可以,例如使用的test账号进行标识的

二、导出SVN项目至本地

  1. 创建空文件夹用于存放SVN的代码,并将userinfo.txt文件放置在同一层级
│  userinfo.txt
└─ MyProject
  1. 鼠标右键 选中Git Bash Here 进入git命令行,执行:
git svn clone -r 12345:HEAD svnurl --no-metadata --authors-file=userinfo.txt MyProject

此处的 -r 12345:HEAD 表示从svn的12345版本到最新版本的提交记录,避免拉取所有数据量过大,操作耗时高。svnurl是svn项目地址。如果需要拉取所有记录,可去除 -r 12345:HEAD

  1. 执行命令后,会弹窗要求输入SVN的账号和密码,然后就会进行同步操作,最终时间长短主要是看需要同步提交记录的多少。

三、与远程git仓库关联起来

  1. 进入项目文件夹,
cd MyProject
  1. 关联远程事先创建好的git项目
git remote add origin gitURL

如:git remote add origin http://192.168.1.xx:5678/MyProject.git

  • 查看关联情况:
git remote -v
  • 如果关联有误,可以删除关联
git remote rm origin
  1. 推送本地项目到git仓库
  • 提交记录之前,先拉取远程git项目文件(如:README.md),否则直接提交会报错
git pull --rebase origin master
  • 拉取成功后,执行push命令
git push -u origin master

执行命令后,可能会弹窗要求输入Git的账号和密码

ref:
1、SVN迁移至GIT,并附带历史提交记录
2、SVN迁移至Git,保留commit提交记录

### GitLab 迁移项目保留提交记录的方法 在迁移项目至 GitLab 保留提交记录的过程中,可以通过以下方法实现: #### 方法一:通过修改远程仓库地址完成迁移 如果已经有一个本地克隆的项目,希望将其迁移到一个新的 GitLab 仓库中,则可以直接更改远程仓库地址。此操作不会影响本地代码和提交历史。 1. **登录目标 GitLab 创建新项目** 在目标 GitLab 实例上创建一个空白项目,复制其 HTTPS 或 SSH 地址(例如 `http://example.com/username/newproject.git`)。 2. **更新本地项目的远程仓库地址** 使用以下命令将本地项目的远程地址更改为新的 GitLab 仓库地址: ```bash git remote set-url origin http://example.com/username/newproject.git[^3] ``` 3. **推送所有分支和标签** 推送所有的分支和标签到新的远程仓库: ```bash git push -u origin --all # 推送所有分支 git push -u origin --tags # 推送所有标签 ``` --- #### 方法二:从现有 GitLab 转移到另一个 GitLab 当需要将现有的 GitLab 项目迁移到另一个 GitLab 实例时,可以按照以下步骤操作: 1. **导出项目文件** 在原 GitLab 的 Web 界面中找到要迁移的项目页面,点击“Settings -> General”,向下滚动到“Export project”部分,下载该项目的 `.tar.gz` 文件。 2. **导入项目到新 GitLab** 登录到目标 GitLab 实例,在首页或特定组下选择“Import Project”。上传之前导出的 `.tar.gz` 文件即可自动完成迁移过程,包括提交历史、Issues 和 Wiki 页面等内容都会被保留。 3. **验证数据完整性** 导入完成后,进入新项目页面确认所有内容已正确迁移,尤其是提交历史记录是否完整。 --- #### 方法三:从 SVN 迁移GitLab 保留提交历史 对于基于 Subversion (SVN) 的项目,可采用以下方式迁移GitLab: 1. **初始化 Git 仓库SVN 关联** 首先在一个干净目录中初始化 Git 仓库将它与 SVN 库关联起来: ```bash git svn init https://svn.example.com/repo --prefix=svn/ git config --global user.name "Your Name" git config --global user.email "your-email@example.com" git svn fetch # 将整个 SVN 历史拉取下来 ``` 2. **转换为纯 Git 仓库** 如果不需要再同步回原始 SVN 存储库,可以删除多余的元数据: ```bash git filter-branch --prune-empty --tag-name-filter cat -- --all[^4] rm -rf .git/svn .git/logs/ ``` 3. **添加目标 GitLab 远程仓库** 添加目标 GitLab 上的新仓库作为远程地址: ```bash git remote add origin ssh://git@gitlab.example.com/group/project.git ``` 4. **推送全部内容到 GitLab** 执行以下命令以推送所有分支和标签到新的 GitLab 仓库: ```bash git push origin --all # 推送所有分支 git push origin --tags # 推送所有标签 ``` 5. **持续同步(可选)** 若仍需保持与原有 SVN 库同步,可通过以下命令定期抓取最新变更推送到 GitLab: ```bash git svn rebase && git push origin --all ``` --- #### 注意事项 - 在执行任何迁移前,请确保备份好原有的代码库以防意外丢失。 - 对于大型项目或者复杂的历史记录,可能需要额外的时间来处理大量的提交对象。 - 当涉及敏感信息时,务必检查网络连接的安全性和权限设置。 ```python # 示例 Python 脚本用于自动化某些重复性的 Git 操作 import subprocess def run_git_command(command): result = subprocess.run(command, shell=True, capture_output=True, text=True) if result.returncode != 0: raise Exception(f"Command failed: {command}\nError:{result.stderr}") return result.stdout.strip() remote_url = "http://example.com/username/newproject.git" run_git_command(f"git remote set-url origin {remote_url}") print(run_git_command("git push -u origin --all")) print(run_git_command("git push -u origin --tags")) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值