SVN项目迁移到Git上(并带有完整的提交记录)

本文详细介绍如何将SVN项目迁移到Git,并保留历史提交记录。包括在CentOS服务器上安装Git,创建Git用户和仓库,使用Git Bash迁移SVN代码,以及在本地仓库和远程服务器间推送代码。

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

公司需求早期的一些项目使用的是SVN,现在想要更换为Git,需要代码迁移并且能在Git上看到之前在SVN中的项目的提交记录,公司没有使用gitlab,代码都push在公司的服务器上,用的是TortoiseGit来管理的。

 

第一步:公司服务器系统(centos6.8),安装git

yum -y install git

第二步:创建git用户:

useradd git  #创建名称为git的用户
passwd git   #git用户对应的密码也为git

第三步:创建git仓库:

mkdir /home/git/gitrepo
cd /home/git/gitrepo
git init --bare test.git
chown -R git:git test.git

第四步:开始将svn代码做迁移操作,在windows上任意创建一个空文件夹GitTest,作为一个Git本地仓库,用来存放从SVN上迁移过来的代码。

第五步:在这个文件中打开Git Bash

第六步: 在GitBash中输入clone的命令,在Bash中输入如下指令, 就会开始迁移”git svn clone svnUrl”, 其中里面的svnUrl就是你要迁移的项目的SVN地址

这时会弹出来两个对话框, 让你输入SVN的账号和密码, 当你输入正确的SVN账号和密码时, 代码就会开始迁移. 就会出现如下类似的log

这就表示迁移成功了, 现在要想看以前的提交记录是否迁移过来的话, 我们就需要在命令行里进入的本地仓库根目录中(也就是带有.git的目录), 进入之后输入git log, 就可以看到以前的提交记录了。

第七步:push本地仓库到远程服务器仓库,注意:首先要确保你的远程服务器上有这么一个仓库

#git remote add origin  git@192.168.66.13:/home/git/gitrepo/test.git

进行这两个操作的时候, 会提示你输入你的Git的账号和密码, 点击ok之后就会进行push操作.
注意: 这一步的时候可能会提示一个错误:fatal: remote origin already exists.

如果出现如上所说的错误,解决办法:

$ git remote rm origin #删除远程git仓库

然后在执行第七步。

 

 

完成以上步骤后,测试一下,使用TortoiseGit客户端clone项目

在查看下是否有提交信息

 

转载于:https://www.cnblogs.com/new-journey/p/10178883.html

### 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、付费专栏及课程。

余额充值