Tag: mercurial

mercurial的最佳实践:分支与克隆,还是部分合并?

…所以我已经习惯了Mercurial( add , commit , diff )的简单的东西,发现了.hgignore文件(耶!),并得到了创build和分支之间切换( branch , update -C )。 我有两个主要的问题: 如果我在分支“Branch1”中,并且想从分支“Branch2”中引入一些但并非全部的更改,那我该怎么做? 特别是如果所有更改都在一个子目录中。 (我想我可以只克隆整个资源库,然后使用Beyond Compare这样的目录合并工具来select我的编辑,好像应该有一种方法来隔离一个文件或一个目录中的变化)。 切换与update -C分支之间似乎很容易,我想知道为什么我会打扰使用clone 。 我只能想到几个原因(见下文) – 我还有其他一些原因吗? 一个。 如果我需要一次执行两个版本/分支(例如,执行性能度量比较) 湾 进行备份(将存储clone到物理位置不同的networking驱动器) C。 像我上面提到的那样进行select合并。

在Mercurial上倒退合并

你如何扭转合并对极化分支的影响,而不会痛苦? 这个问题困扰了我好几个月 ,终于放弃了。 你有1个知识库,有2个命名分支。 A和B. 发生在A上的变化将不可避免地发生在B上。 B上直接发生的变化不得在A上发生 在这样的configuration中,将“B”合并为“A”会在存储库中产生可怕的问题,因为对B的所有改变都显示在A中,就好像它们是在A中做出的一样。 从这种情况中恢复的唯一“正常”方式似乎是“撤销”合并,即: hg up -r A hg backout -r BadMergeRev –parent BadMergerevBeforeOnA 看起来一切都很好,直到你决定以正确的方向合并,最终发生各种各样令人讨厌的事情,特别是分支B上被删除/注释的代码突然变得没有注释或没有注释。 到目前为止,还没有一个可行的解决办法,除了“让它做事,然后解决所有的问题”,而且说实话有点贵。 这是澄清问题的图像: [原始图像丢失] 文件C&E(或更改C&E)必须仅出现在分支b上,而不出现在分支a上。 这里的修订A9(分支a,revno 9)是问题的开始。 修订版A10和A11是“退出合并”和“合并退出”阶段。 修订版B12是多余的,错误地重复放弃了不打算放弃的改变。 这种困境已经引起了许多挫折和蓝烟,我想结束它。 注意 试图禁止发生反向并购,这可能是一个显而易见的答案,无论是用钩子还是政策,我已经发现把这个问题弄糟的能力是相当高的,发生这种可能性的可能性很大,即使采取反措施,你也必须假设不可避免的,它会发生,所以你可以解决它。 详细说明 在模型中我使用了分离文件。 这些使问题听起来很简单。 这些只是代表可能是一个单独的行的任意改变 。 另外,为了增加对损害的侮辱,分支A发生了实质性的变化,这留下了一个长期的问题:“分支的变化与分支B的变化发生冲突,分支B刚刚出现(并退回),看起来像一个变化在分支A上代替“ 历史重写技巧: 所有这些追溯解决scheme的问题如下: 我们有9000个提交。 因此新鲜克隆需要半小时 如果某个地方 甚至存在一个不好的版本库,那么它就有可能重新与原始版本库联系起来,然后再次重新开始。 每个人都已经克隆了这个仓库,现在已经过了好几天了。 一个这样的克隆,恰好是一个现场,所以“抹那个,从头开始”=“大诺诺” (我承认,上面的很多都有些蠢,但是他们不在我的控制范围之内)。 唯一可行的解​​决scheme就是那些假设人们可以而且会做一切错误的方法,而且有一种方法可以“消除”这种错误。

如何在Mercurial中添加远程存储库?

我正在以下面的方式与Git仓库合作: 我有不同的生产机器上的主存储库和多个遥控器。 我正在将生产代码推送到遥控器,并重新启动服务以使更改生效。 我即将从Git切换到Mercurial,我想知道我如何能够实现这样的事情。

最常见的Mercurial命令的Git等价物?

我一直在使用Mercurial,但想做一个Git的快速演示。 什么是Git的等价物: hg init . # start a project in the current directory hg addremove # look for any added or deleted files hg commit -m "comment" # commit any uncomitted changes hg status # what have i changed since the last commit?

什么是gg相当于外向(hg out)或hg incoming(hg in)?

可能重复: 我怎样才能看到传入的提交git? “hg outgoing”或“hg incoming”的git相当于什么? 在Mercurial中, hg outgoing的hg outgoing列出比服务器上的更新更新的变更集,并且如果我要执行hg push ,它将被发送。 这与hg incoming和hg pull相反。

Mercurial(hg)只提交某些文件

我试图只提交与Mercurial某些文件。 由于hg有自动添加,每当我尝试提交一个更改它想要提交所有文件。 但是我不希望这样,因为某些文件还没有“准备好”。 有 hg commit -I thefile.foo 但这只是一个文件。 对我来说更好的办法是,如果我可以closures自动添加在Git中。 这可能吗?

打印当前的Mercurial修订哈希?

在Mercurial中提取当前修订哈希是否有更好的方法? hg log -l1|grep changeset|cut -d: -f3 ? 我的webapp部署脚本的一部分使用其独特的修订哈希“上传”应用程序tarball。

删除所有本地变更集并还原到树

我正在使用Mercurial,当地有三个头,我陷入了一个糟糕的混乱局面。 我不能推,我只是想删除所有我的本地更改和提交,并重新启动完全干净的代码和一个干净的历史。 换句话说,我想结束(a)在本地完全相同的代码存在于远程分支的提示和(b)没有任何本地提交的历史。 我知道hg update -C覆盖任何本地更改。 但是,如何删除任何本地提交? 要清楚,我没有兴趣保存我在本地完成的任何工作。 我只想要最简单的方法来恢复到完全干净的本地结帐。

如何查看Mercurial文件的修订历史logging?

对于Mercurial存储库中的给定文件,如何查看修订历史logging? 你怎么能区分文件的两个版本? 理想的做法是使用视觉工具(我们使用ExamDiff做一些其他的差异)。 我会说这是基本的源代码pipe理function,但我似乎无法弄清楚如何与Mercurial做到这一点。

如何放弃一个汞合并?

我是新来的与Mercurial合作。 我的情况: 另一个程序员改变了文件的第一个版本,用两个空格的缩进replace了4个空格的缩进。 (即改变了每一行。)调用第2版,推到远程回购。 我已经承诺在本地工作区进行各种代码更改的第一次修改。 打电话给rev 3。 我没有清楚地知道发生了什么事情,但是我已经hg pull和d hg merge了。 冲突是无数的,并不是真正的实质性的。 所以我真的希望在合并之前将我的本地库修改为2格缩进; 那么合并将是微不足道(我假设)。 但我似乎无法备份。 我想我需要hg update -r 3但它说abort: outstanding uncommitted merges 。 我怎样才能撤消合并,改变我的本地回购空间,并remerge?