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
Version control 使用TortoiseHg,如何从签入/推送中排除文件,但仍能获得更新?_Version Control_Mercurial_Tortoisehg - Fatal编程技术网

Version control 使用TortoiseHg,如何从签入/推送中排除文件,但仍能获得更新?

Version control 使用TortoiseHg,如何从签入/推送中排除文件,但仍能获得更新?,version-control,mercurial,tortoisehg,Version Control,Mercurial,Tortoisehg,可能重复: 我有一个配置文件,我不希望签入,但我确实希望在有人签入更改时得到更新 在大多数系统中,我只需要在签入时取消选中配置文件旁边的勾号,然而HG似乎让生活变得更加艰难 在parforce中,这更容易,我可以在不同的更改列表中签出配置文件,如何在Ortoisehg中执行相同的操作?如果在提交之前从文件列表中取消选中该文件,它将不会进入更改集中。这意味着它不会在推送中使用(因为这些是每个更改集的) 这是Ortoise的一个特性,使得它在命令行上非常有用 如果使用已编辑的文件进行拉取,则将创建

可能重复:

我有一个配置文件,我不希望签入,但我确实希望在有人签入更改时得到更新

在大多数系统中,我只需要在签入时取消选中配置文件旁边的勾号,然而HG似乎让生活变得更加艰难


在parforce中,这更容易,我可以在不同的更改列表中签出配置文件,如何在Ortoisehg中执行相同的操作?

如果在提交之前从文件列表中取消选中该文件,它将不会进入更改集中。这意味着它不会在推送中使用(因为这些是每个更改集的)

这是Ortoise的一个特性,使得它在命令行上非常有用

如果使用已编辑的文件进行拉取,则将创建多个头部。如果希望文件具有更改功能,可以合并这些功能,但这可能是一个手动步骤

或者对于配置文件,使用Mercurial的补丁队列功能非常有用。因此,从命令行可以执行此操作(假设在工作目录中更改):

这将创建一个名为“localConfigs”的新修补程序队列项,并将编辑的文件(您的配置文件)放入该项中。然后你可以:

hg qpop
将其从修补程序队列中删除(从更改集路径中删除)。或:

将其放在更改集路径中。这是一种更简单的管理文件更改的方法,您可以在与中央存储库保持同步的基础上定期执行此操作:弹出队列项目,拉出并更新队列项目,然后重新推送队列项目(处理任何合并冲突,但如果项目较小,则很少发生这种情况)。这样可以避免多个头部

我们倾向于在办公室里使用这种机制

注意,推送和弹出的行为类似于堆栈集合;如果“localConfigs”位于“moreLocalChanges”之上,则如果希望推送“localConfigs”,则需要这两个选项。我的示例假设“localConfigs”补丁是队列中唯一的补丁。在Mercurial配置中,默认情况下也会禁用它,但它附带了它,因此您可以简单地启用它:

[extensions]
mq =

一般来说,你不会。通常的处理方法不是将配置文件放入源代码管理中,而是将其模板放入源代码管理中。类似于
config.sample
。如果
config
不存在,您甚至可以调整运行/构建脚本,将
config.sample
复制到
config


使用mq或别名(如
mycommit=commit-X config
)还有很多其他方法可以尝试实现这一点,但在其核心,文件要么被跟踪,要么不被跟踪,每个人都必须自己更改的文件不应该被跟踪。

提交时,命令行也提供了
-X
。是的,但用户界面更容易一些。当然,我采用了“这是Ortoise的一个特性,它使它在命令行上非常有用。”暗示您不能使用命令行,当使用别名(或禁止的[defaults]块)时,您可以不费吹灰之力地执行此操作——尽管我仍然认为应该像大多数主要项目那样将文件从跟踪中排除。对不起,我还暗示,单击复选框比键入完整的文件路径更容易。我原则上同意,但对于默认配置,它是一个需要跟踪的文件,在这种情况下,每次只需要更改一行。我认为Ry4an是对的,它被跟踪了还是没有。我建议的另一个解决方法是使用两个配置文件,而不是一个。第一个是“全局”配置(已版本化),另一个“本地”配置文件是完全可选的(未版本化且被忽略)。本地配置文件的值仅用于覆盖全局配置的值。我不知道您使用的是什么编程语言,但有几种语言可以轻松实现这一点。在python中是config=ConfigParser()config.read(['master.conf','local.conf'])@AdamHouldsworth是的,这很难。理想情况下,我会使用include(
%include-config-$HOST
)或覆盖(加载
config
,然后在其上加载
config.local
,如果它存在的话,但这需要一个灵活的配置系统,或者一个可以修改以变得灵活的配置系统。无论如何,Mercurial不会让跟踪、编辑但从不提交的文件变得容易——这并不是他们想要让它变得容易的地方(它的C#,类似这样的东西应该是可能的。非常值得研究。或者您可以在加载该值的位置取消引用环境变量。允许数据库路径覆盖文件中的值可以让开发人员在系统级别设置他们自己的环境,并使文件不个性化。
hg qpush
[extensions]
mq =