Questions tagged «mercurial»

Mercurial是一种快速的开源DVCS(分布式版本控制系统)。

5
在Mercurial上回退合并
您如何扭转合并对极化分支的影响而又不至于痛苦呢? 这个问题困扰了我几个月,我终于放弃了。 您有1个存储库,其中有2个 命名分支。A和B。 A上发生的更改将不可避免地发生在B上。 直接在B上发生的更改绝不能在A上发生。 在这种配置中,将“ B”合并为“ A”会在存储库中产生可怕的问题,因为对B的所有更改都像在A中所做的一样出现在A中。 从这种情况中恢复的唯一“正常”方法似乎是“回退”合并,即: hg up -r A hg backout -r BadMergeRev --parent BadMergerevBeforeOnA 看起来一切正常,直到您决定以后以正确的方向合并,并且最终会发生各种令人讨厌的事情,并且在特定分支B上被擦除/注释掉的代码突然变得未擦除或未注释。 到目前为止,除了“让它做事,然后手动解决所有问题”之外,还没有可行的可行解决方案,而且说实话有点麻烦。 这是说明问题的图像: [原始图像丢失] 文件C和E(或更改C&E)必须仅出现在分支b上,而不出现在分支a上。此处的修订版A9(分支a,修订版9)是问题的开始。 修订版A10和A11是“回退合并”和“合并回退”阶段。 修订版B12是无用的,错误地反复删除了原本不打算删除的更改。 这种困境造成了很多挫败感和蓝烟,我想结束这一困境。 注意 尝试通过钩子或策略来禁止反向合并可能是显而易见的答案,我发现将这种情况搞糟的能力相当高,而且发生这种可能性的可能性很大,以至于即使采取对策,您仍然必须假设不可避免地会发生这种情况,以便您可以在解决时解决它。 详细说明 在模型中,我使用了单独的文件。这些使问题听起来很简单。这些仅代表可以是单独一行的任意更改。 同样,为了增加伤害,在分支A上进行了实质性更改,留下了常设问题:“使分支A的更改与分支B的更改发生冲突,分支B的更改看起来像是在变回(并退出),看起来像是在更改”在分支A上,“ 关于历史重写技巧: 所有这些追溯解决方案的问题如下: 我们有9000次提交。 新鲜克隆因此需要半小时 如果某个地方甚至存在一个错误的存储库克隆,它的一种似然又会回到与原始存储库的联系,然后重新将其重新敲打。 每个人都已经克隆了该存储库,现在已经进行了几天提交了。 这样的一个克隆恰好是一个在线站点,因此“擦除该克隆并从头开始” =“ big nono” (我承认,以上许多内容有些愚蠢,但它们超出了我的控制范围)。 唯一可行的解​​决方案是那些假设人们可以并且将做错所有事情的解决方案,并且有一种方法可以“消除”这种错误。
77 mercurial  merge  dvcs  branch 


4
如何在Mercurial上git reset --hard HEAD?
我是一个尝试使用Mercurial的Git用户。 这是发生的事情:我hg backout对要还原的变更集进行了操作。那创造了一个新的头,所以hg指示我进行合并(我想回到“默认”)。合并后,它告诉我我仍然必须提交。然后,我注意到解决合并中的冲突时我做错了某些事情,并决定我希望像以前一样拥有所有东西hg backout,也就是说,我希望这种未提交的合并消失。在Git上,这些未提交的内容将包含在索引中,而我只是想git reset --hard HEAD删除它,但据我所读,该索引在Mercurial上不存在。那我该如何退出呢?
76 git  mercurial  merge  dvcs 

5
如何在Mercurial(hg)中列出存储库中的所有文件?
Mercurial中是否有一条命令会列出当前受源代码控制的所有文件? 我可以dir /s列出所有文件夹和子文件夹中的文件,但是我不知道已将其添加到存储库中。我有各种排除的文件类型和文件夹,我想在.hgignore文件中进行设置之前确认没有添加任何文件和文件夹。

6
使用Git和Mercurial进行部分克隆
是否可以在Git和Mercurial中仅克隆一个分支(或从给定提交中克隆)?我的意思是,我想克隆一个中央存储库,但是由于存储库很大,所以我只希望得到其中的一部分,并且仍然能够回馈我的更改。可能吗?就像,我只想要Tag 130或类似的东西? 如果是这样,怎么办?
74 git  mercurial 

14
Mercurial“服务器”
我已经使用Mercurial了一段时间,但主要是为自己使用。但是,现在,我有一个项目正在研究我们两个人在哪里构建同一个项目,并且我们可能会修改彼此的文件。 我想在服务器上设置一个Mercurial存储库,使该存储库成为“服务器”,因此我的更改和其他编辑者的更改都推送到该服务器(因此基本上是Subversion / CVS模型);我虽然喜欢Mercurial,但不想切换到Subversion之类的东西。 在我自己的网络中,一切都在Linux上完成,并且我的“服务器”已安装OpenSSH。因此,将我的更改(我在多台计算机上工作)从一台计算机推送到服务器只是“ hg push”问题。使用的协议是SSH来传输更改。 问题是我使用Linux,服务器将是Windows(所以没有OpenSSH,对吗?),另一个编辑器也将使用Windows。据我所知,在这类类型的设置中使用Mercurial的最佳方法是使存储库从源中提取更改,而不是从源中推送到“服务器”。我位于多个防火墙(不完全是我的网络)的后面,并且我的计算机从服务器看不到,并且我假设其他编辑器也位于防火墙的后面(所以我们不能只启动本地Mercurial HTTP服务器并从中获取“服务器”计算机)。 两位编辑者对服务器存储库进行更改的最佳方式是什么?(我应该补充一点,该服务器是Internet上的服务器,因此它看起来像一样google.com。它是托管的Windows服务器,但是如果需要,我可能会有权安装软件。)

5
什么是最好且必须拥有的汞/汞离子延伸剂?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我最近一直在尝试hg / mercurial,即与Fogcreek的窑一起使用,而我正在尝试弄清楚什么是必须的扩展。在扩展名列表中进行筛选有些棘手,因为即使它们的描述听起来很棒,我也不希望测试任何有缺陷或不切实际的扩展名。 那么,您使用哪些hg扩展名? 请参阅使用扩展
74 mercurial 

3
最佳实践:分支与克隆,以及部分合并?
...因此,我已经习惯于使用Mercurial(add,,)进行简单的操作commit,diff并了解了.hgignore文件(yay!),并开始创建和在分支(branch,update -C)之间切换。 我有两个主要问题: 如果我在分支“ Branch1”中,并且想从分支“ Branch2”中提取部分但不是全部更改,我该怎么做?特别是如果所有更改都在一个子目录中。(我想我可以克隆整个存储库,然后使用Beyond Compare之类的目录合并工具来选择并选择我的编辑内容。似乎应该有一种方法可以将更改仅隔离到一个文件或一个目录中。 在分支之间切换update -C似乎如此简单,我想知道为什么还要麻烦使用clone。我只能想到几个原因(请参阅下文)-我是否还缺少其他一些原因? 一种。如果我需要一次处理两个版本/分支(例如,执行性能指标差异) b。用于备份(clone存储库到物理位置不同的网络驱动器) C。像我上面提到的那样进行选择合并。

7
Git作为商业客户?为什么没有git-hg?
这个问题困扰了我一段时间。我已经完成作业并检查了stackoverflow,并至少找到了有关我的问题的以下两个主题: Git for Mercurial(如git-svn)和 Git与Mercurial存储库的互操作性 我已经进行了一些认真的谷歌搜索来解决这个问题,但是到目前为止还没有运气。我还阅读了《Git Internals》一书,以及《幕后的Mercurial Definitive》一书试图找出答案。我仍然有些困惑,为什么我找不到合适的git-hg工具。 从我的角度来看,git-svn是主要功能之一,为什么在工作中我还是选择使用git而不是Mercurial。它使我可以使用自己喜欢的工作流程,如果他们不在乎,则无需其他任何人打扰。正如链条之一所示,我只是看不到使用中间的hg repo来回转换的意义。 因此,无论如何,从我读过的书中,hg和git在概念设计上似乎非常相似。内在存在差异,但是这些差异都不能阻止为hg创建git客户端。在我看来,远程跟踪分支和章鱼的合并使git比hg更加强大。 因此,真正的问题是,是否有任何真正的原因导致git-hg不存在(或至少很难找到)?git用户(和开发人员)对他们的hg同行是否有敌意,导致缺少git-hg工具?你们中的任何人是否有计划开发类似的东西并公开发布?我可以自愿(尽管具有很弱的C技能)参加以完成此任务。我只是不具备自己动手的全部知识。 这可以成为永久结束所有DVCS战争的工具吗?
74 git  mercurial  interop 


10
如何在IIS上设置Mercurial和hgweb?
我一直在寻找关于如何在IIS上运行hgweb的不错的指导,但是我没有发现太多的价值。 Mercurial Wiki上有此“逐步说明”,但这不是很好。还有这个和这个,但同样,我找不到好的步骤,导致了那些上手哪里。
73 windows  iis  mercurial 

3
如何将一个分支与默认分支进行比较
我切换到本地存储库上的一个分支,注意到它给了我显示x个文件已更新的消息。这让我感到惊讶,因为我不知道该分支有什么区别。如何将该分支与默认分支进行比较以查看发生了什么变化?
73 mercurial 

5
推创建新的远程头!(您是否忘记合并?使用push -f强制)
好的,我有一个小小的google,找不到解决方案,因为我偶然发现了相同的消息,但人们得到消息的方式不同。我是Mercurial的新手,并且想要确保自己做的正确。 所以我收到上面的错误信息。我有一个开发站点和一个在线站点,我正在尝试将代码推送到代码库。 但是昨天我不小心做了hg add,添加了所有我不想做的媒体。之后,我确实恢复了从代码库中删除所有媒体文件的方式,然后提交并推送了更改。因此,今天我一直在更改CSS文件和一些模板。我已经提交了更改并推送了它们,但是当我运行时,hg push我得到了上面的错误。 我已经运行了hg log,并且只有6次提交,因为它是一个干净的/新的分支/项目。任何帮助将不胜感激,如果我没有正确解释任何内容,我深表歉意!
73 mercurial 

6
提交和推送单个文件同时不进行其他修改的最简单方法是什么?
我对Mercurial来说还比较陌生,我的团队正在尝试将其作为Subversion的替代产品。 如何提交单个文件并将其推送到另一个存储库,同时不提交工作目录中的其他修改(或至少不推送到另一个存储库)? 对于我们而言,数据库迁移会发生这种情况。我们希望将迁移提交给源代码管理,以便DBA可以在进行代码修改以进行该数据库迁移时查看和编辑它。变更尚未准备就绪,因此我们不想将所有变更都推出。 在Subversion中,我只是要做: svn add my_migration.sql # commit only the migration, but not the other files I'm working on svn commit -m "migration notes" my_mygration.sql 并继续在本地工作。 这不适用于Mercury,因为当我将其推送到另一个存储库时,如果有未删除的更改,它希望我将其删除,合并并提交合并到存储库。合并后提交不允许您忽略文件,因此会强制您提交本地存储库中的所有内容。 我能想到的最简单的方法是将文件提交到本地存储库,克隆本地存储库,从实际存储库中获取任何新更改,合并并提交合并,然后将我的更改推出。 hg add my_migration.sql hg commit -m "migration notes" my_migration.sql cd .. hg clone project project-clone cd project-clone hg fetch http://hg/project hg …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.