SVN项目迁移到Git方法

2023-05-16

本文记录如何将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 origin
  Fetch URL: ssh://admin@192.168.100.22:29418/zentaopms
  Push  URL: ssh://admin@192.168.100.22:29418/zentaopms
  HEAD branch: master
  Remote branch:
    master tracked
  Local 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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVN项目迁移到Git方法 的相关文章

  • 为什么 git mergetool 说“没有文件需要合并”?

    我正在尝试将 BeyondCompare4 配置为 git 中的 difftool 和 mergetool 我使用的是 git 版本 2 5 0 windows 1 到目前为止 BeyondCompare4 作为 difftool 工作得很
  • Github 版本如何生成存档文件名?

    我刚刚在 github 上为我的 NFQL 软件创建了版本 这是发布页面 https github com vbajpai nfql releases https github com vbajpai nfql releases 对于最新版
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • 恢复 git reset --soft

    我修改了我的分支中的一些文件并做了一个 git add all 但这添加了一些我不打算为提交添加的文件 所以我做了一个 git reset soft HEAD 2 instead of doing git reset HEAD 但之前的提交
  • 尽管有 svn 复制,如何 git svn 克隆完整历史记录

    在我的公司 我们即将从 svn 切换到 git 我们使用的 SVN 非常大 没有 svn 布局 并且在每个版本拆分上我们都制作了一个 svn 副本 SVN存储库结构 svnserver company de product xy 主要版本号
  • 如何避免开发人员将凭证推送到 bitbucket?

    我们有一个应用程序 它使用 JSON 文件来定义数据库和其他 API 的连接字符串和凭据 理想情况下 这些凭证作为变量添加到 bitbucket 存储库中 并在 Jenkins 的构建期间进行替换 开发商在当地与他们合作时更换了他们 我们需
  • 如何使用 libgit2 创建空提交?

    我一直在寻找libgit2 C API 参考 https libgit2 org libgit2 但我不知道如何模仿git commit allow empty libgit2 是否有内置方法来创建空提交 如果没有 git 如何在底层创建一
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • 本地git,推送到tfs远程repo

    我厌倦了向我的队友解释使用 DVCS 相对于 CVCS 的好处 他们中的一些人害怕学习曲线 另一些人则看不出任何原因 因为对他们来说 这都是一样的 就我个人而言 我对 TFS 及其问题感到非常厌倦 每当我需要进行一些小的 修复 时 我都必须
  • 在 GitHub 上执行拉取请求时避免不需要的合并提交和其他提交

    我在 Github 上分叉了一个项目 令远程上游为upstream我的远程存储库是origin 我当地的master分支设置为跟踪远程master分支 然后我在本地添加了一些东西master 时不时与上游汇合 直到今天我想发出pull re
  • Git 中的“分支提示”是什么?

    我正在学习 Git 并阅读专业 Git 书籍 https git scm com book en v2 书中和 Stack Overflow 上有时会使用术语 分支提示 但我找不到它的含义 分支提示是分支上的最后一次提交或最近一次提交 基本
  • SVN 提交前撤消删除

    如果您从 SVN 工作副本中删除了一个目录 但尚未提交 则如何将其恢复并不明显 当您输入 svn undo d 时 Google 甚至建议将 svn undo delete before commit 作为常见查询 但搜索结果没有任何帮助
  • 如何将普通的 Git 存储库转换为裸存储库?

    如何将 普通 Git 存储库转换为裸存储库 主要区别似乎是 在普通的 Git 存储库中 你有一个 git存储库内的文件夹 包含构成工作副本的所有相关数据和所有其他文件 在裸露的 Git 存储库中 没有工作副本和文件夹 我们称之为repo g
  • 当出现错误时如何删除远程分支?

    我尝试过以下命令 但失败了 git push origin next remote error denying ref deletion for refs heads next To blah git remote rejected nex
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • 从 github 中删除子项目提交

    我有两个存储库A and B 我错误地在我的机器上将仓库 B 克隆到了 A 内 我从存储库 B 中删除了所有代码 但是当我在源上从 A 推送并合并代码时 它还显示了子项目提交B在 Github 仓库上 我想从我的 master 上删除子项目
  • Visual Studio Code 内置故事,用于查看 git 提交历史记录并对其内容进行比较

    In this https stackoverflow com questions 37899765 how can i view the git history in visual studio code 60013101 noredir
  • 致命:不是 git 存储库(或任何父目录):.git [重复]

    这个问题在这里已经有答案了 当我尝试推送 github com 上的现有存储库时 当我输入命令时 网站提示我将其输入终端 我收到了以下致命错误消息 Not a git repository or any of the parent dire
  • git Blame:合并后正确的作者

    GIT 合并引入了新的提交 这会导致 git Blame 问题 合并的行似乎是由进行合并的开发人员提交的 我可以理解这种情况冲突的变化 因为他解决了冲突 但是有没有办法让非冲突线路不发生这种情况呢 一些 git Blame 的选择 如果没有

随机推荐

  • openwrt 18.06修改lan ip之后,自动跳转到新的ip

    feeds luci modules luci base luasrc view footer htm xff0c 强制修改为不需要回滚 xff0c 应该还有更好的方法 uci apply true 43 uci apply false f
  • 开源代码网站集合

    USB ModeSwitch xff1a http www draisberghof de usb modeswitch LWIP xff1a https savannah nongnu org projects lwip cJSON xf
  • adb.exe无法运行,提示0xc000007b错误

    运行android studio xff0c 提示adb server无法运行 xff0c 在命令行下进入C Users Administrator AppData Local Android Sdk platform tools xff0
  • 【Flutter入门到进阶】Dart进阶篇---进阶用法

    1 Dart对象扩展 1 1 extension 1 1 1 介绍 可以在不更改类或创建子类的情况下 xff0c 向类添加扩展功能的一种方式 灵活使用 extension 对基础类进行扩展 xff0c 对开发效率有显著提升 1 1 2 需求
  • 中国天气网API(最新接口)

    一 产品概述 SmartWeatherAPI 接口 简称 SWA 接口 是中国气象局面向 网络媒体 手机厂商 第三方气象服务机构等用户 xff0c 通过 web 方 式提供数据气象服务的官方载体 二 使用说明 该数据主要包括预警 实况 指数
  • MySQL事务:事务隔离

    对数据进行并发操作时 xff0c 事务可以确保数据的完整性 xff0c 在银行 证券交易等业务场景需要用到它 xff0c 本文将介绍MySQL事务是如何保证数据的一致性的 目录 事务特性事务启动与提交事务回滚 什么是事务隔离事务隔离级别 事
  • MySQL锁:全局锁、表级锁和行锁

    事务的实现离不开MySQL数据库的锁机制 xff0c 设计锁的目的也是为了处理并发访问问题 xff0c 本文简单介绍MySQL 里面的全局锁 表级锁和行锁三类锁 目录 全局锁表级锁表锁1 读锁实例2 写锁实例 元数据锁 行锁行锁简介行锁实例
  • Java环境安装配置步骤介绍

    本文记录Windows环境和Linux环境 centos7 安装Java以及Linux环境升级Java JDK版本的步骤 目录 Windows环境安装Java JDK1 下载安装2 配置环境变量 Linux环境安装Java JDK1 下载安
  • Maven 安装和配置方法详解

    通常一个Java项目会引用大量的 jar 包 xff0c 而jar 包之间可能存在各种依赖关系 xff0c 如果运行Java项目时仅使用classpath 参数来管理jar包会非常不方便 xff0c 此外 xff0c 在项目编译 打包 升级
  • MySQL索引介绍

    索引主要是用来提高数据库的查询效率的 xff0c 它对指定的列或列的集合生成索引 xff0c 然后可以通过索引来检索目标数据 xff0c 就像目录一样 xff0c 缩小了扫描范围 xff0c 大大提高了查询效率 如果不使用索引 xff0c
  • 第二、UIScrollView的使用大全

    UIScrollView 原理详解 ScrollView UIScrollView UIScrollView 为了显示多于一个屏幕的内容或者超过你能放在内存中的内容 Scroll View 为你处理缩小放大手势 xff0c UIScroll
  • 持续集成平台Jenkins:docker镜像升级

    Jenkins 2 357 及 LTS 2 361 1之后的版本要求Java 11 或者 17 xff0c 如果使用的是Java 8 xff0c 要升级最新版本的Jenkins xff0c 就需要升级Java JDK版本 xff0c 本文记
  • 持续集成:通过Jenkins API创建项目和节点

    我在持续集成 xff1a Jenkins API使用方法详细介绍中介绍了jenkins API的使用方法 xff0c 比如使用API读取jenkins项目相关信息 触发构建等操作 xff0c 除此之外 xff0c 还可以直接使用API来创建
  • Android APP稳定性测试工具Fastbot

    我在 自动遍历测试之Monkey工具 和 AppCrawler自动遍历测试 分别介绍了APP稳定性测试工具monkey和AppCrawler xff0c 它们各有优缺点 xff0c 本文介绍另一款也比较好用的稳定性测试工具Fastbot 目
  • 持续集成:使用Jenkins API创建视图

    持续集成 xff1a 通过Jenkins API创建项目和节点介绍了使用jenkins API来创建项目和新建节点 xff0c jenkins API也可以创建视图 xff08 view xff09 目录 1 获取视图配置文件2 创建视图3
  • Fiddler抓取手机APP报文

    Http协议代理工具有很多 xff0c 比如Burp Suite Charles Jmeter Fiddler等 xff0c 它们都可以用来抓取APP报文 xff0c 其中charles和Burp Suite是收费的 xff0c Jmete
  • 使用Jmeter抓取手机APP报文并进行APP接口测试

    Jmeter是一个比较常用的接口测试工具 xff0c 尤其是接口性能测试 当然它也可以用来测试手机APP的HTTP接口 xff0c 我在Fiddler抓取手机APP报文 和 接口测试代理工具charles mock测试 分别介绍了Fiddl
  • 禅道二次开发技巧

    本文记录一些进行禅道二次开发的技巧 目录 代码调试方法1 xff1a error log方法方法2 xff1a file put contents方法方法3 xff1a a var 方法 禅道扩展技巧1 读取当前用户2 读取当前模块方法名3
  • git merge 和 git rebase 的区别

    Git版本控制中 xff0c git rebase 和 git merge 这两个命令都可以用来集成从一个分支和另一个分支的更改 它们是两种不同的合并方法 xff0c 本文将介绍它们的差异 git rebase 和 git merge 主要
  • SVN项目迁移到Git方法

    本文记录如何将SVN项目迁移到Git xff0c 并保留提交日志信息 目录 Git和SVN差异环境准备Git安装 配置 项目迁移1 将源SVN库转换到Git本地仓库2 添加Git远程库地址3 推送代码到Git 常见错误参考文档 Git和SV