如何解决 Mercurial 版本冲突
什么是版本冲突
当两个工程师都对版本库中的同一个文件中的同一行内容都进行了修改,而且其中一位工程师已经用 "hg push" 命令将这个变更集(changeset)推入到版本库中, 当另外一位工程师要向该版本库推入另外一个变更集时,Mercurial会自动发现来自这两个工程师的变更集有冲突,而拒绝第二位工程师对版本库的推入操作。提示大致如下:
pushing to /ws/tmp/hellosearching for changesabort: push creates new remote branches!(did you forget to merge? use push -f to force) 注意: 此时,第二位工程师仍然可以用 "hg push -f" 命令,强行将它的变更集推入远程版本库,但是我们规定原则上不得进行这样的操作。 版本库的冲突应及时与有关工程师,项目主管协同解决。
解决冲突
当你对远处版本库的推入操作被拒绝时,说明你的修改和远程版本库中的内容有冲突,此时应该用 "hg pull" 命令将远程版本库中的内容拉入到你的版本库中, 当远程版本库的内容被拉入时,hg 同样会自动发现你的版本库中有内容冲突而提示解决,如:
$ hg pullpulling from /ws/tmp/hellosearching for changesadding changesetsadding manifestsadding file changesadded 1 changesets with 1 changes to 1 files (+1 heads)(run 'hg heads' to see heads, 'hg merge' to merge)...$ hg mergeMercurial 推荐使用第三方的专门的合并工具来解决版本冲突。如果你的工作机上没有安装第三方合并工具,则 hg 会自动弹出默认的文本编辑工具来显示并提示编辑冲突, 我们可以手动在文本工具上编辑冲突的文本块,但不推荐这个方法,如:
/* * This is C file for hg example<<<<<<< /ws/tmp/hello2/hello.c * second desc line from hello2======= * second desc line for hello1>>>>>>> /tmp/hello.c~other.eWVR_T */#include <stdio.h> 最好的方法是安装第三方的合并工具来编辑冲突。
安装和使用第三方合并工具
Mercurial 支持很多的第三方合并工具,譬如:
•meld - Meld,著名的文件合并工具
•tkdiff - tkdiff,可以在 Windows 下使用
•kdiff3 - kdiff3, KDE 图形界面下的合并工具
•xxdiff
•TortoiseMerge - TortoisySVN,也是 Windows 下的合并工具。
你可以选择一种你喜欢的来安装,并配置 ~/.hgrc 文件,下面以使用 Gentoo Linux 下的 Meld 为例子:
# emerge meld /* 安装 Meld */修改 ~/.hgrc 文件:
[ui]username = Luo Zheng Rong <vortune@gmail.com>merge = meld /* 指定用什么工具作为合并工具 */安装并配置第三方合并工具后,当我们运行 "hg merge" 命令,且有版本内容冲突的时候,hg 会自动弹出第三方合并工具, 形象地显示冲突,并且我们可以在工具中直接编辑文件,如下图:
编辑完冲突的文本块并保存之后,我们就可以提交合并过的变更集,并推入远程版本库:
$ hg commit -m "Merge conflict from tow heads"$ hg push
回滚拉入操作
当我们发现有版本内容冲突时,应该和你的协作者充分沟通,统一意见之后再进行合并操作,此时 如果你不想立即处理冲突,在你执行 "hg push" 命令之前,可以回滚最后一次的拉入操作:
hg rollback 管理和解决冲
分享到:
相关推荐
Mercurial是一款强大的分布式版本控制系统,它允许开发者在本地存储代码的完整历史记录,并通过网络与其他用户的代码库进行同步。这种工作方式提高了开发效率,增强了协作能力,同时也提供了灵活的分支管理和冲突...
4. **冲突解决**:当多个人对同一部分代码进行修改时,Mercurial会自动检测冲突,并提示用户手动解决。 TortoiseHg在此基础上提供了以下特性: 1. **Windows资源管理器集成**:在Windows的文件系统中右键点击即可...
3. **新功能**:可能引入了新的命令行选项或者扩展插件,以提供更丰富的功能,比如更好的冲突解决工具或增强的代码审查支持。 4. **用户界面改进**:可能优化了命令行界面的输出,使其更加人性化,或者提供了新的...
在合并时,如果出现冲突,Mercurial会提示用户手动解决。 Mercurial的扩展与配置: Mercurial有许多可扩展的功能,可以通过配置文件`.hgrc`进行定制。例如,可以设置别名(Aliases)简化命令,或者安装插件以增强...
在软件开发过程中,版本控制工具是必不可少的,它们可以帮助开发者追踪代码的修改历史,解决冲突,并进行回退或分支操作。Mercurial具有轻量级、易于学习和使用的特性,使其成为许多项目的选择。 1. **基本概念** ...
SourceTree支持Mercurial,意味着你可以用它来管理Mercurial仓库,包括克隆、提交、拉取、推送和解决合并冲突等。 **Mercurial 3.6.3-x64的关键特性** Mercurial 3.6.3版本可能包含以下特性或改进: - 提升了性能...
- **合并修改:** 当合并时,Mercurial会尝试自动解决冲突,并允许用户手动解决无法自动解决的冲突。 - **合并与重命名:** 在合并过程中,如果涉及文件的重命名,Mercurial也会正确处理这些情况。 **4.5 其他有趣...
- **Mercurial**:一款分布式版本控制系统,用于管理软件开发中的源代码更改历史,适用于个人开发者到大型团队的不同场景。 - **版本控制的重要性**: - **协作**:允许多个开发者在同一项目上工作,而不会导致...
同时,它提供了冲突解决工具,帮助用户在合并不同分支时处理潜在的冲突问题。 4. **可视化工具**:TortoiseHg提供了多种图表和历史视图,如时间线视图、日志视图和图形化的差异视图,以清晰地展示代码库的演变过程...
总的来说,Mercurial-6.0.1作为Python库,为开发者提供了一套强大且灵活的版本控制解决方案。通过了解并掌握Mercurial的基本操作和高级特性,我们可以更高效地进行团队协作,提升软件开发的效率和质量。无论你是个人...
8. **合并操作**:处理并解决合并冲突,将不同分支的更改合并到一起。 9. **推送和拉取**:与远程仓库同步,将本地更改推送到远程,或从远程仓库拉取新的更改。 在实际开发中,Go-Hgo可以帮助你构建各种基于...
6. **合并(Merge)**:将两个或多个分支的更改合并到一起,解决冲突,形成一个新的提交。 7. **克隆(Clone)**:复制一个完整的Mercurial仓库,包括所有历史记录,可以快速在不同机器间复制项目。 **Mercurial在...
**SourceTree:强大的Git与Mercurial版本控制图形界面** SourceTree是一款由Atlassian公司开发的免费源代码管理工具,专为Git和Mercurial版本控制系统提供了一个直观的图形化界面。它使得开发者无需深入命令行操作...
- **解决冲突**:内置冲突解决工具,帮助用户在合并分支时解决冲突问题。 3. **Mercurial支持** 除了Git,SourceTree还支持Mercurial版本控制系统,为使用Hg的开发者提供同样友好的界面。 4. **自定义设置** ...
4. **冲突解决**:提供便捷的冲突解决工具,帮助用户处理合并时出现的问题。 5. **远程操作**:支持与远程仓库的交互,如推送、拉取、克隆等操作。 6. **集成IDE**:能够与Eclipse、IntelliJ IDEA等集成开发环境无缝...