SVN项目迁移到Git方法
创始人
2024-05-29 07:33:02
0

本文记录如何将SVN项目迁移到Git,并保留提交日志信息。

目录

  • Git和SVN差异
  • 环境准备
    • Git安装、配置
  • 项目迁移
    • 1. 将源SVN库转换到Git本地仓库
    • 2. 添加Git远程库地址
    • 3. 推送代码到Git
  • 常见错误
  • 参考文档

Git和SVN差异

Git是一个开源的分布式版本控制系统,由Linux之父Linus Torvalds于2005年开发,而SVN是一个集中式的版本控制系统。

Git和SVN的主要区别如下表:

GitSVN
Git是分布式的SVN是集中式的
Git支持离线操作,有本地的版本控制SVN必须联网操作,只有服务器上的版本控制
上传下载速度快上传下载速度慢
Git功能多,命令较多,有更多的概念和命令。与git相比,SVN操作更简单。
开启分支方便、速度快svn的分支是一个目录,拉分支较慢

以上是它们的主要差异,下面介绍如何将已有的SVN仓库迁移到空的Git仓库,另外,本文Git服务器使用Gerrit搭建。

环境准备

Git安装、配置

Git安装配置方法可参考Git简易教程-安装及简单使用 。

项目迁移

1. 将源SVN库转换到Git本地仓库

使用git-svn将源Subversion库转换为本地Git存储库。

$ git svn clone https://192.168.100.21/svn/zentao

如果SVN项目有忽略文件,执行如下命令转换SVN:ignore属性为 .gitignore文件。

cd c:\mytempdir
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'

如果clone完成后,SVN仓库还有更新,可执行以下命令同步SVN更新:

$ git svn rebase

2. 添加Git远程库地址

$ git remote add origin "ssh://admin@192.168.100.22:29418/zentaopms"$ git remote show origin
* remote originFetch URL: ssh://admin@192.168.100.22:29418/zentaopmsPush  URL: ssh://admin@192.168.100.22:29418/zentaopmsHEAD branch: masterRemote branch:master trackedLocal ref configured for 'git push':master pushes to master (up to date)

3. 推送代码到Git

$ git push origin master:master --force
Enumerating objects: 2324, done.
Counting objects: 100% (2324/2324), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2307/2307), done.
Writing objects: 100% (2324/2324), 3.50 MiB | 1.25 MiB/s, done.
Total 2324 (delta 691), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (691/691)
remote: Processing changes: refs: 1, done
To ssh://admin@192.168.100.22:29418/zentaopms+ eef598e...07c6319 master -> master (forced update)

常见错误

推送代码报如下错误:

$ git push origin master:master --force
Enumerating objects: 2324, done.
Counting objects: 100% (2324/2324), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2307/2307), done.
Writing objects: 100% (2324/2324), 3.50 MiB | 1.32 MiB/s, done.
Total 2324 (delta 692), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (692/692)
remote: Processing changes: refs: 1, done
To ssh://admin@192.168.100.22:29418/zentaopms! [remote rejected] master -> master (failed to lock)
error: failed to push some refs to 'ssh://admin@192.168.100.22:29418/zentaopms'

原因是当前用户没有push权限,到gerrit添加push 权限即可。

参考文档

  1. https://www.atlassian.com/git/tutorials/migrating-overview

  2. https://learn.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git?view=azure-devops

  3. https://www.gitkraken.com/blog/migrating-git-svn

这些熟读经史的人以仁义道德相标榜,以发挥治国平天下的抱负为国家服务,以自我牺牲自许;——黄仁宇《万历十五年》

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...