使用TortoiseSVN客户端Merge时出现的问题

本文分享了使用TortoiseSVN客户端合并代码时的经验教训,详细介绍了如何正确地将分支(branches)合并到主干(trunk),包括确保本地及服务器代码为最新版本、正确执行合并步骤等关键点。

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

如题,记录一个使用TortoiseSVN客户端合并时走得一个弯路

为了方便代码管理,我们在服务端通常会生成三个文件夹trunkbranchestags分别为主干,分支,标签。
根据本人理解(如有不正确之处欢迎批评指正):

  1. trunk(主干)用于保存最新的代码,当然,如果一起开发的技术人员少的话也可以直接在trunk上开发,这样分支就没有什么用了。
  2. branches(分支):举个例子,当多个人合作,可能有这样的情况出现:John突然有个想法,跟原先的设计不太一致,可能是功能的添加或者日志格式的改进等等,总而言之,这个想法可能需要花一段时间来完成,而这个过程中,John的一些操作可能会影响Sally的工作,John从现有的状态单独出一个project的话,又不能及时得到Sally对已有代码做的修正,而且独立出来的话,John的尝试成功时,跟原来的合并也存在困难。这时最好的实践方法是使用branches。John建立一个自己的branch,然后在里面实验,必要的时候从Sally的trunk里取得更新,或者将自己的阶段成果汇集到trunk中。
  3. tag(标签):通常在最新版本上线后会从trunk里打一个标签,一是方便版本的管理,二是如果你发现以前某个已上线的版本出现一个bug时你就可以从tag里拿到相应版本的代码进行修改。因此在实现上,branches和tag,都是svn使用主干copy实现的。

如果还有不明白的点击看这里

介绍以上三个知识后讲讲用svn进行合并时的注意点。当亲自实践完后,其实你发现从分支合并到主干需要注意三点:

  • 一、保证你本地有trunk的最新代码,如果没有务必先checkout下来。并且你服务器上的branches的代码也是最新的;

  • 二、在trunk的整个目录下执行merge,并从服务器上的相应的branches合并到本地的trunk;

  • 三、再把本地trunk代码commit到服务器上。

没错,就是这简单的三步TM使我这菜鸟头疼了将近一天。最开始我直接想从服务器上相应的branches合并到trunk上,现在想想完全天方夜谭啊,老程序员说得永远不要在服务器上动代码或者各种文件就是真理啊。错误点二、我想从分支合并到主干,可是执行时却在本地branches的整个目录下进行merge,结果就是一大堆一大堆的conflict,还解决不了。到最后项目已经完全不知道是不是最新的了。最后把以前本地trunk(当时也不知道本地的主干是不是最新的了,真是笑哭)的所有文件(除了.svn)全部删除并commit,然后把备份好的最新分支代码整个手动复制粘贴到trunk上再提交,这是当时的应急之策,也是醉了。接下来再附上几张过程图:

这里再次强调想要合并到哪儿,就要到哪儿的本地文件夹上进行merge,这里合并到trunk
这里再次强调想要合并到哪儿,就要到哪儿的本地文件夹上进行merge,这里合并到trunk

这里我都选第二种,第一种字面意思上是合并一定版本范围内的代码
这里我都选第二种,第一种字面意思上是合并一定版本范围内的代码

这里又是一个注意点,和我们平常理解的意思相反,from是指要合并到的地方,我要合并到trunk这里就选服务器上trunk的地址,to选来源,即相应分支
这里又是一个注意点,和我们平常理解的意思相反,from是指要合并到的地方,我要合并到trunk这里就选服务器上trunk的地址,to选来源,即相应分支]

三步过后就能把branches里最新的代码merge到trunk上了,注意,此时SVN上的log日志没有记录(我也不明白为啥没有一个相应版本号来记录merge),然后再把合并后的本地trunk上的代码commit一下就完工了。

这里顺便记录一下创建分支,同样也是在trunk上的文件夹上右击选择branch/tag,然后To path选择branches下相应的应用版本的文件夹即可。
To选择branches下建的相应应用版本的文件夹即可

各路大神有不同意见的欢迎更正批评,希望初学者也不要走和我一样的弯路!!!

前言 1. 什么是 TortoiseSVN? 2. TortoiseSVN 的特性 3. 许可协议 4. 开发 4.1. TortoiseSVN 的历史 4.2. 致谢 5. 阅读指南 6. 本文使用的术语 1. 开始 1.1. 安装 TortoiseSVN 1.1.1. 系统要求 1.1.2. 安装 1.2. 基本概念 1.3. 开始试用 1.3.1. 创建版本库 1.3.2. 导入项目 1.3.3. 检出工作副本 1.3.4. 进行修改 1.3.5. 添加更多的文件 1.3.6. 查看项目历史 1.3.7. 撤消更改 1.4. 继续前进 ... 2. 基本版本控制概念 2.1. 版本库 2.2. 版本模型 2.2.1. 文件共享的问题 2.2.2. 锁定-修改-解锁 方案 2.2.3. 复制-修改-合并 方案 2.2.4. Subversion 怎么做? 2.3. Subversion 实战 2.3.1. 工作副本 2.3.2. 版本库的 URL 2.3.3. 修订版本 2.3.4. 工作副本怎样跟踪版本库 2.4. 摘要 3. 版本库 3.1. 创建版本库 3.1.1. 使用命令行工具创建版本库 3.1.2. 使用 TortoiseSVN 创建版本库 3.1.3. 本地访问版本库 3.1.4. 访问网络共享磁盘上的版本库 3.1.5. 版本库布局 3.2. 版本库备份 3.3. 服务器端钩子脚本 3.4. 检出链接 3.5. 访问版本库 4. 日常使用指南 4.1. 基本特性 4.1.1. 图标重载 4.1.2. 右键菜单 4.1.3. 拖放 4.1.4. 常用快捷方式 4.1.5. 认证 4.1.6. 最大化窗口 4.2. 导入数据到版本库 4.2.1. 导入 4.2.2. 导入适当的位置 4.2.3. 专用文件 4.3. 检出工作副本 4.3.1. 检出深度 4.4. 将你的修改提交到版本库 4.4.1. 提交对话框 4.4.2. 修改列表 4.4.3. 从提交列表中排除项目 4.4.4. 提交日志信息 4.4.5. 提交进程 4.5. 用来自别人的修改更新你的工作副本 4.6. 解决冲突 4.6.1. 文件冲突 4.6.2. 属性冲突 4.6.3. 树冲突 4.6.3.1. 本地删除,当更新有更改进入 4.6.3.2. 本地更改,当更新有删除进入 4.6.3.3. 本地删除,当更新有删除进入 4.6.3.4. 本地缺少,当合并有更改进入 4.6.3.5. 本地更改,当合并有删除进入 4.6.3.6. 本地删除,当合并有删除进入 4.6.3.7. 其它树冲突 4.7. 获得状态信息 4.7.1. 图标重载 4.7.2. 详细状态 4.7.3. 在 Windows 资源管理器中的 TortoiseSVN 列 4.7.4. 本地与远程状态 4.7.5. 查看差别 4.8. 修改列表 4.9. 版本日志对话框 4.9.1. 调用版本日志对话框 4.9.2. 版本日志动作 4.9.3. 获得更多信息 4.9.4. 获取更多的日志信息 4.9.5. 当前工作副本的版本 4.9.6. 合并跟踪特性 4.9.7. 修改日志消息和作者 4.9.8. 过滤日志信息 4.9.9. 统计信息 4.9.9.1. 统计页 4.9.9.2. 作者提交次数统计页 4.9.9.3. 按日期提交统计页 4.9.10. 离线方式 4.9.11. 刷新视图 4.10. 查看差异 4.10.1. 文件差异 4.10.2. 行结束符和空白选项 4.10.3. 比较文件夹 4.10.4. 使用 TortoiseIDiff 进行比较的图像 4.10.5. Diffing Office Documents 4.10.6. 其他的比较/合并工具 4.11. 添加新文件和目录 4.12. 复制/移动/重命名文件和文件夹 4.13. 忽略文件和目录 4.13.1. 忽略列表中的模式匹配 4.14. 删除、移动和改名 4.14.1. 正在删除文件/文件夹 4.14.2. 移动文件和文件夹 4.14.3. 处理文件名称大小写冲突 4.14.4. 修复文件改名 4.14.5. 删除未版本控制的文件 4.15. 撤消更改 4.16. 清理 4.17. 项目设置 4.17.1. Subversion 属性 4.17.1.1. svn:keywords 4.17.1.2. 增加和编辑属性 4.17.1.3. 导出和导入属性 4.17.1.4. 二进制属性 4.17.1.5. 自动属性设置 4.17.2. TortoiseSVN 项目属性 4.17.3. 属性编辑器 4.17.3.1. 外部条目 4.17.3.2. SVN 关键字 4.17.3.3. EOL 样式 4.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值