2010-06-10 86 views
1

我们刚刚从SVN切换到Mercurial,但现在我们遇到了与工作流相关的问题。例如: 我有我工作的存储库的本地克隆。我正在对我们的代码库进行一些高度实验性的更改,在我确定它按照预期的方式工作之前,我不想提交这些更改,我甚至不想在本地提交它。现在,同时,我的同事已经做了一些重要的改进/缺陷修复,这是我需要的。他将他的提交推送到我们的主要存储库。问题是,如何在不需要我必须提交所有更改的情况下将自己的更改合并到工作空间中,因为我需要他的更改来测试我自己的代码?将更改合并到未提交更改的工作区

我们在完全相同的工作流程中遇到的更多日常问题是我们在存储库中有几个配置文件。每个开发人员都会对配置文件进行一些小环境特定更改,但不要提交更改。这两对未提交的文件阻碍了我们对工作区进行任何合并,就像上面的例子一样。理想情况下,配置文件可能不应该存放在存储库中,不幸的是,这就是它在这里不可知的原因。

回答

1

有两种操作,因为你已经发现,这使得从一个人的改变提供给他人(或许多,一边。)

还有的拉动,从的其他一些克隆发生变化存储库并将它们放入您的克隆。

有推动,它会从您的存储库中进行更改并将其放入另一个克隆。

就你而言,你的同事已经将他的改变推向了我认为是你的储存库的中心主人。

他已经做到了这一点之后,你可以拉的最新变化下到你的资料库,并把它们合并到你的分支。这将包含任何错误修正或将您的同事修改到实验代码中。

这给你住在其他同事的发展目前在你的项目,并没有释放你的实验代码,直到它准备的自由(甚至在所有。)

所以,只要你留下来远离Push命令,你很安全。

当然,这还假定没有人直接从您的存储库的克隆拉动,如果他们这样做,那么他们当然会得到你的实验性的变化,但它听起来并不像你已经设定,这个(而且极不可能)

至于配置文件,这样做的典型方法是您只将一个主文件模板提交到存储库中,使用不同的名称(即一个额外的扩展名.template或类似的),和然后将真正的配置文件的名称到忽略滤波器。

然后,每个开发人员都必须制作他自己的模板副本,重新命名并以任何他们想要的方式进行更改,而不会将数据库连接字符串,密码或本地路径提交到存储库。

如有必要,请提供一个脚本,以帮助开发人员在真实的配置文件中生成冗长而复杂的配置文件。

1

关于您的实验性更改,您应该提交它们。经常。 只需将它们提交给您不推送的克隆即可。 You only pull to merge无论您需要从其他仓库获得哪些更新。

至于配置文件,不要提交它们。
提交模板文件以及能够从模板生成完整配置文件的脚本。
这样,开发人员将只修改“private”(即未提交)配置文件和他们自己的私有值。

3

如果您不想克隆,您可以按照以下方法进行。

hg diff > mylocalchanges.txt 
hg revert -a 
# Do your merge here, once you are done, import back your local mods 
hg import --no-commit mylocalchanges.txt 
1

如果你知道你提交的改变不会合并碰撞承诺,你正在创建 - 那么你可以做以下...

1)搁置未提交更改

2)做拉和合并

3)取消搁置未提交的变化

保质有效地存储您提交的修改远为成DIFF(R elative上次提交)然后回滚您的本地工作区中的这些文件。然后取消搁置,然后应用该差异,带回未提交的更改。

TortoiseHg等工具已内置货架。