当前位置: 首页 > news >正文

将 svn 仓库迁移到 git 仓库

我找到了一个很久很久以前编写的项目,然而当时是使用 svn 进行版本管理的。然而现在的版本管理全部是 git,不愿意再装一个 svn 工具来管理这些古老的项目,于是打算将其迁移到 git 中。

本文介绍如何将古老的 svn 项目迁移到 git。


本文内容

      • 找回 svn 仓库的 url
      • 将 svn 仓库迁移到 git 仓库
        • 命令行
        • TortoiseGit
        • 参考资料

找回 svn 仓库的 url

如果你能记得你 svn 仓库的 url,或者这个仓库是一个纯本地仓库,那么你直接复制这个 url 就好了。

然而如果这是一个有 svn 远程服务器的仓库,那么你可能依然需要临时安装一下 svn 工具。我们只是为了拿回 url 而已。

这里我使用当时使用的小乌龟 TortoiseSVN。在 svn 仓库空白处右击选择版本库浏览器(Repo-browser),小乌龟会自动定位到当前仓库所在的远程 svn 服务器的对应文件夹。

版本库浏览器

我们所要做的只有一件事——复制顶部那个 url。

得到了这个 url 后,像我这种洁癖就卸载 TortoiseSVN 了。

将 svn 仓库迁移到 git 仓库

命令行

在一个新的文件夹中,我们输入如下命令:

git.exe svn clone "https://svn.walterlv.com/LvYi/Timer" ".\Walterlv.RepoFromSvn"

如果那个 svn 目录中包含 trunkbranchestags 结构,那么可以在后面添加相应的参数以便在 clone 完成后保留分支和标签信息。

git.exe svn clone "https://svn.walterlv.com/LvYi/Timer" ".\Walterlv.RepoFromSvn" -T trunk -b branches -t tags

需要注意的是,上面的 Walterlv.RepoFromSvn 文件夹是不允许提前存在的,如果存在将无法迁移成功。

TortoiseGit

这里特地照顾一下从 TortoiseSVN 迁移来继续考虑 TortoiseGit 的小伙伴。在 TortoiseGit 中的操作是:

  1. 在某个文件夹中右键(或者 Shift+右键)
  2. 选择克隆
  3. 按照下图填写来自 url 的远程服务器 url 和本地文件夹,并打勾“从SVN版本库”

TortoiseGit 上的迁移 SVN 操作


参考资料

  • Git - Migrating to Git
  • How to get svn remote repository URL? - Stack Overflow
  • Migrate from Subversion (SVN) to Git - Microsoft Docs

我的博客会首发于 https://walterlv.com/,而 CSDN 和博客园仅从其中摘选发布,而且一旦发布了就不再更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 使用 Visual Studio 调试多进程的程序
  • 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新)
  • 为 WPF 程序添加 Windows 跳转列表的支持
  • 在 Windows 系统上降低 UAC 权限运行程序(从管理员权限降权到普通用户权限)
  • 专栏素材
  • Visual Studio 如何能够不进行编译就调试 .NET/C# 项目(用于解决大项目编译缓慢的问题)
  • 仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢?
  • 全局或为单独的项目添加自定义的 NuGet 源
  • 电脑总是意外从睡眠状态唤醒,可以找出原因然后解决
  • 我收集的各种公有 NuGet 源
  • 制作一个极简的 .NET 客户端应用自安装或自更新程序
  • 在 MSBuild 编译项目时阻止输出所有的警告信息
  • 编写 MSBuild 内联编译任务(Task)用于获取当前编译环境下的所有编译目标(Target)
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker入门(二) - Dockerfile
  • es6(二):字符串的扩展
  • HTTP中GET与POST的区别 99%的错误认识
  • JS题目及答案整理
  • scrapy学习之路4(itemloder的使用)
  • use Google search engine
  • vuex 笔记整理
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从tcpdump抓包看TCP/IP协议
  • 关于 Cirru Editor 存储格式
  • 将回调地狱按在地上摩擦的Promise
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端学习笔记之观察者模式
  • 全栈开发——Linux
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 王永庆:技术创新改变教育未来
  • 走向全栈之MongoDB的使用
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #QT项目实战(天气预报)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (39)STM32——FLASH闪存
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (python)数据结构---字典
  • (备忘)Java Map 遍历
  • (二)斐波那契Fabonacci函数
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • [ NOI 2001 ] 食物链
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [1127]图形打印 sdutOJ
  • [2010-8-30]
  • [AIGC] Java 和 Kotlin 的区别