Mercurial 将对工作区的更改与未提交的更改合并
我们最近刚从SVN切换到Mercurial,但现在我们的工作流程遇到了问题。例子: 我有我工作的存储库的本地克隆。我正在对我们的代码库进行一些高度实验性的更改,在我确定它按照预期的方式工作之前,我不想提交这些更改,我甚至不想在本地提交这些更改。现在,我的同事同时做了一些我需要的重大改进/错误修复。他将其提交推送到我们的主存储库。问题是,既然我需要他的更改来测试我自己的代码,我如何将他的更改合并到我的工作区,而不需要提交所有更改Mercurial 将对工作区的更改与未提交的更改合并,mercurial,Mercurial,我们最近刚从SVN切换到Mercurial,但现在我们的工作流程遇到了问题。例子: 我有我工作的存储库的本地克隆。我正在对我们的代码库进行一些高度实验性的更改,在我确定它按照预期的方式工作之前,我不想提交这些更改,我甚至不想在本地提交这些更改。现在,我的同事同时做了一些我需要的重大改进/错误修复。他将其提交推送到我们的主存储库。问题是,既然我需要他的更改来测试我自己的代码,我如何将他的更改合并到我的工作区,而不需要提交所有更改 我们在使用完全相同的工作流时遇到的一个更为日常的问题是,我们在存储库
我们在使用完全相同的工作流时遇到的一个更为日常的问题是,我们在存储库中有两个配置文件。每个开发人员对配置文件进行一些特定于环境的小更改,但不提交更改。这两个未提交的文件妨碍我们对工作区进行任何合并,就像上面的示例一样。理想情况下,配置文件可能不应该在存储库中,不幸的是,这正是它必须存在的原因。关于您的实验性更改,您应该提交它们。经常 只需在克隆中提交它们,而不推送。您需要从其他回购协议获得的任何更新 对于配置文件,不要提交它们。
提交模板文件,并且脚本能够从模板生成完整的配置文件。
这样,开发人员只会使用自己的私有值修改“私有”(即未提交)配置文件。关于您的实验性更改,您应该提交它们。经常 只需在克隆中提交它们,而不推送。您需要从其他回购协议获得的任何更新 对于配置文件,不要提交它们。
提交模板文件,并且脚本能够从模板生成完整的配置文件。
这样,开发人员只会用他们自己的私有值修改“私有”(即未提交)配置文件。正如您所发现的,有两种操作可以将一个人的更改提供给其他人(或任何一方的多个) 还有拉取,它从存储库的其他克隆中获取更改,并将它们放入您的克隆中 还有推送,它从您的存储库中获取更改并将其放入另一个克隆中 在您的情况下,您的同事将其更改推到了我认为是您的存储库中心主控的位置 在他完成这项工作之后,您可以将最新的更改向下拉到存储库中,并将它们合并到分支中。这将把您的同事所做的任何错误修复或更改合并到您的实验代码中 这使您可以自由地了解项目中其他同事的最新开发,并且在准备好之前(甚至根本不需要)不必发布实验代码 所以,只要你远离推送命令,你就安全了 当然,这还假设没有人直接从您的存储库克隆中提取数据,如果他们这样做,那么他们当然会得到您的实验性更改,但听起来您并不是这样设置的(这也不太可能) 对于配置文件,执行此操作的典型方法是,只将主文件模板提交到存储库中,并使用不同的名称(即额外的扩展名.template或类似名称),然后将实际配置文件的名称放入忽略过滤器中 然后,每个开发人员都必须制作自己的模板副本,重命名模板,并以他们想要的任何方式对其进行更改,而不会有向存储库提交数据库连接字符串、密码或本地路径的风险
如有必要,请提供一个脚本,帮助开发人员创建长而复杂的真实配置文件。正如您所发现的,有两种操作可以将一个人的更改提供给其他人(或任何一方的许多更改) 还有拉取,它从存储库的其他克隆中获取更改,并将它们放入您的克隆中 还有推送,它从您的存储库中获取更改并将其放入另一个克隆中 在您的情况下,您的同事将其更改推到了我认为是您的存储库中心主控的位置 在他完成这项工作之后,您可以将最新的更改向下拉到存储库中,并将它们合并到分支中。这将把您的同事所做的任何错误修复或更改合并到您的实验代码中 这使您可以自由地了解项目中其他同事的最新开发,并且在准备好之前(甚至根本不需要)不必发布实验代码 所以,只要你远离推送命令,你就安全了 当然,这还假设没有人直接从您的存储库克隆中提取数据,如果他们这样做,那么他们当然会得到您的实验性更改,但听起来您并不是这样设置的(这也不太可能) 对于配置文件,执行此操作的典型方法是,只将主文件模板提交到存储库中,并使用不同的名称(即额外的扩展名.template或类似名称),然后将实际配置文件的名称放入忽略过滤器中 然后,每个开发人员都必须制作自己的模板副本,重命名模板,并以他们想要的任何方式对其进行更改,而不会有向存储库提交数据库连接字符串、密码或本地路径的风险
如有必要,请提供一个脚本,帮助开发人员制作长而复杂的真实配置文件。如果不想克隆,可以按以下方法进行
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
如果你不想克隆,你可以用下面的方法
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
如果你知道自己不舒服