在mercurial checkouts之间移动不完整的代码

时间:2009-11-15 09:57:49

标签: mercurial

我检查了台式机上的代码库并对其进行了一些操作。现在我走开了,想要在我的笔记本电脑上进行这些更改。

一种解决方案是简单地提交不完整的代码,然后将它们放在我的笔记本电脑上。但这意味着我在回购中有未编译的代码,我想避免这种情况。

最好的方法是什么?生成并应用补丁?使用hg服务来移动不完整的变化?

4 个答案:

答案 0 :(得分:4)

以下是三种方法。我将讨论各自的优点和缺点:

选项1 :使用hg diff获取显示未更改的更改的diff文件,然后在接收端使用hg import --nocommit来应用这些更改,而不创建新的更改集< / p>

  • 优点:简单,不创建任何变更集
  • 缺点:实际上并没有使用它的DVCS。可能无法捕获新添加的文件

选项2 :在发送方提交,推送到接收端(或从中拉出,或将hg bundle放在闪存驱动器上),绕过工作服务器,{ {1}}在接收方,然后update两个方面消除变更集(但保留更改。

  • 优点:使用推送和拉动来移动像mercurial打算的更改
  • 缺点:Hacky。依赖于只能在1级深度工作的回滚。意外拉两次,你无法撤消第一次。

选项3 :在发送方提交。推送到只有您访问的开发人员仓库,并拉动接收端。在事情发生之前不要向公司回购,但是当你推动推送所有间隙变更集时

  • 优点:完全是DVCS的内容。您的工作订单已记录并保存
  • 缺点:需要设置一个只有你自己的克隆

FWIW,我建议选项3.每个开发人员存储库正是DVCS的内容。如果您的公司无法轻松地在服务器上设置一个可以在家中访问的服务器,请向他们指出记录使开发人员完成修复/功能的流程的巨大价值。 鼓励开发人员经常推出一个不需要编译的回购,这对日常备份来说非常有用。

最后,在完成功能或修复后,您可以随时折叠掉所有中间变更集。我不喜欢这样做(我是显示你的工作那种人),但是这里的方法是:Can I squash commits in Mercurial?

答案 1 :(得分:1)

嗯....如果你想让“头”干净那么(而且我可能没有得到Hg的条款,我认为在SVN中,还没有做足够的Hg):

在当前一轮更改之前进行分支,设置当前工作,即不构建在分支上的东西,将更改提交到分支,将分支拉到笔记本电脑,去,播放,返回,然后将它们全部合并在一起(这应该是相当微不足道的,因为头部不会改变)并且如果你真的想要切除分支!

我已经看过几次“顺便说一下”这些写入的变化 - 总是被认为是DVCS“更好”的原因,尽管它可能需要我剩下的时间才能找到一个例子) - :

或者(想更多 - 并且允许我更多地使用SVN) - 关键是我可以提交我想要的本地“WIP”存储库,是否破坏代码,因此会拉动(或推动) )我当前的WIP到笔记本电脑并安全返回。需要清理(总是构建)的存储库是“服务器”,所以虽然我可能在本地提交,但我不会 PUSH 到该存储库 - 服务器端 - 直到它全部好... (那个“服务器”存储库就是那个触发构建服务器的存储库,依此类推)。我怀疑后者更接近我见过的大多数例子。

答案 2 :(得分:0)

另一个很酷的选择(但更多一点涉及)是将未完成的更改放入MQ(首先启用mq扩展)并版本化mq(qinit -c)。然后,使用qcommit提交补丁队列的当前状态,并通过拉动和推送mq来同步未完成的工作。

答案 3 :(得分:0)

它可能被视为没有文化,但我经常使用rsync通过SSH移动“正在进行中”的存储库,直到我达到值得提交的地方为止。