Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial 将对工作区的更改与未提交的更改合并_Mercurial - Fatal编程技术网

Mercurial 将对工作区的更改与未提交的更改合并

Mercurial 将对工作区的更改与未提交的更改合并,mercurial,Mercurial,我们最近刚从SVN切换到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
如果你知道自己不舒服