我们刚刚从SVN切换到Mercurial,但现在我们的工作流程遇到了问题。例: 我有我工作的存储库的本地克隆。我正在对我们的代码库进行一些高度实验性的更改,在我确定它按照预期的方式工作之前我不想提交,我不想在本地提交它。现在,同时,我的同事已经做了一些我需要的重大改进/错误修复。他将他的提交推送到我们的主存储库。问题是,如何在不要求我提交所有更改的情况下将他的更改合并到我的工作区,因为我需要他的更改来测试我自己的代码?
我们在完全相同的工作流程中遇到的日常问题是我们在存储库中有几个配置文件。每个开发人员对配置文件进行一些小的特定于环境的更改,但不提交更改。这些未提交的文件阻碍了我们对工作区进行任何合并,就像上面的示例一样。理想情况下,配置文件可能不应该存放在存储库中,不幸的是,这就是未知的原因。
答案 0 :(得分: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)
关于您的实验性更改,您应该提交它们。经常。 只需将它们提交到克隆中即可。 You only pull to merge您需要从其他回购中获得的任何更新。
对于配置文件,请不要提交它们 提交模板文件,以及能够从模板生成完整配置文件的脚本 这样,开发人员只会使用自己的私有值修改“私有”(即未提交)配置文件。
答案 2 :(得分:1)
正如您所发现的那样,有两个操作可以将一个人的更改提供给其他人(或者任何一方的许多人)。
有拉动,它从存储库的其他一些克隆中获取更改并将它们放入您的克隆中。
正在推送,它会从您的存储库中进行更改并将它们放入另一个克隆中。
在您的情况下,您的同事已将他的更改推送到我认为是您的存储库的中央主人。
完成此操作后,您可以将最新更改下载到存储库中,然后将它们合并到您的分支中。这将包含任何错误修正或您的同事更改为您的实验代码。
这使您可以自由地保持项目中其他同事开发的最新状态,而不必在准备好之前(甚至根本不需要)发布实验代码。
所以,只要你远离Push命令,你就安全了。
当然,这也假设没有人直接从您的存储库克隆中提取,如果他们这样做,那么当然他们会得到您的实验性更改,但听起来并不像您这样设置它(而且这种可能性也很小。)
对于配置文件,执行此操作的典型方法是您只将主文件模板提交到存储库中,使用不同的名称(即额外的扩展名.template或类似名称),然后将名称设置为将实际配置文件放入忽略过滤器。
然后,每个开发人员必须制作他或她自己的模板副本,重命名模板,并以他们想要的任何方式进行更改,而不存在将数据库连接字符串,密码或本地路径提交到存储库的风险。 / p>如果有必要,提供一个脚本,帮助开发人员制作真实的配置文件,如果它很长很复杂。
答案 3 :(得分:1)
如果您知道未提交的更改不会与您正在创建的合并提交冲突 - 那么您可以执行以下操作...
1)搁置未提交的更改
2)拉动和合并
3)取消保留未提交的更改
Shelf有效地将您未提交的更改存储为diff(相对于上次提交),然后在本地工作空间中回滚这些文件。然后取消搁置然后应用该差异,带回您未提交的更改。
像TortoiseHg这样的工具内置了架子。