使用Git来管理svn代码

本文介绍了如何在本地利用git管理大型svn仓库,通过gitsvn克隆仓库并创建本地分支进行开发。在遇到svn更新时,使用git svn rebase同步代码。在合并分支和解决冲突时,提供了详细步骤。此外,还讨论了如何撤销git提交以及在合并冲突时退出未完成的合并。

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

背景简介

项目基于svn进行版本控制,trunk对应下一个即将上线版本A,A上线后切为分支branchA,手头要开发的几个功能对应下下个版本B,暂不能提到trunk上

此时有两种办法

  1. 在svn上建立一个自己的分支branch_zhangsan,将代码提到上面,之后再合并至trunk。
    (会导致几个功能代码都在一个分支内,将来合并trunk比较麻烦,同样会导致增加硬盘占用)
  2. 在本地copy几份svn目录,在每个目录中开发不同的功能,开发完毕留在本地,待branchA建立后提交到trunk
    (本地硬盘占用较多)

在svn库比较大时,占用会比较明显,故考虑在本地使用git来管理代码

使用git

主要是使用git svn命令将svn仓库下载到本地,在本地进行git的分支开发,最后在可以提交功能的时候将本地git分支代码合并至master,最后提交到svn服务器

建立仓库

需要打开git bash工具输入命令 -r 参数代表本地git需要根据svn信息来生成的svnlog记录 -r100:HEAD代表svn100至当前的记录本地git都能看(区间越大同步速度越慢,代码库大的时候巨慢) -rHEAD代表不看之前的记录(最快)

  • git svn clone -rHEAD https://192.168.1.101:8888/svn/MyServer MyServer1
  • (在执行上面命令时会弹窗让你输入svn的用户名 密码)

进行开发

在开发时就是普通的git开发流程了,对不同功能建立不同branch

先开发个功能1

  • git checkout master
  • git branch gongneng1
  • git checkout gongneng1
  • 为功能1写好一堆bug
  • git add .
  • git commit -m “gongneng1”

可能还要做个功能2

  • git checkout master
  • git branch gongneng2
  • git checkout gongneng2
  • 为功能2写好一堆bug,顺便喷一喷策划
  • git add .
  • git commit -m “gongneng2”

同步svn服务器代码到本地

我们开发时svn上其它人可能提交了许多代码,我们需要同步下来,以免本地与svn服务器差距过大,后面提交引起各种问题

  • git checkout master
  • 确保本地状态为clean
  • git svn rebase

合并分支

  • git checkout master
  • git merge gongneng1 无冲突的话git会自动提交,不需要后续几步
  • 如果有冲突则merge会停下来,还需要解决一下冲突
  • git status查看哪些文件冲突了,使用你习惯的工具解决
  • git add 冲突的文件
  • git commit -m “merge gongneng1”

提交代码到svn

  • git svn dcommit

撤销提交

在本地git提交代码后,有可能需要撤销提交

  • git reset --hard HEAD^ 将git强制回退到上一版本

合并过程中如果有冲突,git处于merging状态时,有可能不想合并了

  • git reset --hard HEAD 强制git恢复至当前版本初始状态

本人对git了解不多,写的也比较仓促,如有错误请留言指出

### 使用 Git管理 SVN 仓库的解决方案 虽然 GitSVN 是两种不同的版本控制系统,但在某些场景下,开发者可能会遇到需要通过 Git 管理 SVN 仓库的需求。针对这种情况,Git 提供了一个名为 `git-svn` 的工具,能够帮助用户在本地使用 Git 操作远程的 Subversion (SVN) 仓库。 #### 主要步骤: 1. **安装 git-svn** 首先你需要确保已经安装了 Git,并且包含了对 `git-svn` 支持的功能模块。 2. **克隆 SVN 仓库到本地 Git** ```bash git svn clone <URL_of_SVN_repository> ``` 这行命令会将整个 SVN 项目历史记录复制到新的 Git 库中作为本地副本。 3. **同步更新** 当你在工作过程中想要获取最新的更改时,可以运行以下命令来拉取来自 SVN 的最新变更并将其合并进当前分支: ```bash git svn rebase ``` 4. **提交改动至 SVN** 完成所有修改后,你可以像平常一样添加文件、创建提交信息等操作;当准备推送回原始 SVN 存储库之前,请确认所有的更改都已经 commit 到临时区(staging area),然后执行下面这行指令完成最终递交过程: ```bash git svn dcommit ``` 5. **处理冲突** 如果发生冲突,则需解决后再继续上述流程中的相应环节直至成功上传。 6. **保持与团队协作的一致性** - 经常性的从远端拉去更新(`fetch`)以及再基础之上做变基(rebasing),以此保证自己代码始终处于最近的状态; - 尽量避免直接向主干(master/trunk)推送未经测试的内容; - 考虑为每个特性或者修复单独建立 topic 分支以方便管理和维护。 7. **清理不再使用的分支及标签** 对于那些过期或是已完成的任务对应的分支要及时删除以免造成混乱。 8. **考虑使用专门的服务或脚本简化集成** 对于更复杂的迁移需求或频繁交互的情况,还可以利用一些第三方服务如 GitHub/GitLab CI pipelines 或编写自定义脚本来辅助转换和自动化任务。 此外,还有一个非常受欢迎的选择叫做 [SubGit](https://subgit.com/) 。它是一个双向镜像工具,可以在不需要改变现有基础设施的情况下让两个系统之间平滑过渡。不过请注意它是商业软件,在评估版期限过后可能涉及费用问题。 #### 开源方案推荐: 如果你想寻找更多免费开源的方式来进行类似的操作,除了官方提供的 `git-svn` 工具外还有以下几个选择可供参考: - [Svn-Git-Mirror](https://github.com/jamesdbrock/svn-to-git-migration-scripts): 此项目包含了一系列用于一次性转移 SVN 数据库到 Git 格式的实用程序集合,同时也支持增量式导入策略以便长期跟踪变化。 - [Migration Tools for Visual Studio Team Services/TFS](https://github.com/Microsoft/vsts-sync-migrator): 微软推出的 VSTS 同步迁移器不仅适用于 VS 团队服务(Team Foundation Server),还同样适合其他类型的 SCM 包含 SVN -> Git 移植工程。 最后再次提醒大家根据实际应用场景挑选最合适的工具组合!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwao7890

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值