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,在我们的应用程序中,用户可以使用工具栏在页面之间导航,默认情况下显示第1页。我正在修改第3a页,它只能通过点击几下工具栏来访问。在调试过程中这样做很烦人,所以在main.cpp中,我将默认设置为第3a页,但我绝对不想签入它。然而,Mercurial不断地告诉我main.cpp被修改了(当然),这会干扰诸如合并之类的事情 我想将main.cpp移到Mercurial中的一个特殊列表中,基本上就是“是的,我知道这个文件被修改了,不用担心”。请注意,Shelf扩展不是我想要的,因为main.cpp将恢

在我们的应用程序中,用户可以使用工具栏在页面之间导航,默认情况下显示第1页。我正在修改第3a页,它只能通过点击几下工具栏来访问。在调试过程中这样做很烦人,所以在main.cpp中,我将默认设置为第3a页,但我绝对不想签入它。然而,Mercurial不断地告诉我main.cpp被修改了(当然),这会干扰诸如合并之类的事情

我想将main.cpp移到Mercurial中的一个特殊列表中,基本上就是“是的,我知道这个文件被修改了,不用担心”。请注意,Shelf扩展不是我想要的,因为main.cpp将恢复到其原始状态。我也不想“忘记”这个文件。有人能解决这个问题吗


(mods:请随意编辑这个问题,使其更加简洁)

正如Chris在评论中指出的那样,快速而肮脏的方法是使用我在另一个问题中建议的机制。更好的方法是使用提交钩子来防止包括该文件在内的提交:

[hooks]
pretxncommit.nomain = sh -c "! hg log -r tip --template '{files}' | grep -q /main.cpp"

您仍然必须记住不要在提交行中包含main.cpp,但是当您忘记提交时,提交将拒绝提交。

没有扩展名允许您忽略Mercurial已跟踪的文件

然而,你可以遵循的方法很少

正如Ry4an建议的那样,阻止包含该文件的提交,然后执行显式

hg commit file1, file2, ...
另一种优雅的方法是告诉提交方法在提交文件时忽略某些类型的文件

我更喜欢这种方法

hg commit --help
 .......
 -X --exclude PATTERN [+]  exclude names matching the given patterns
例如:

say I have two files a.py, b.py in my repo. I have changed them both.
hgt $ hg status
M a.py
M b.py
hgt $ hg commit -X a.py -m "Added new line to b.py"
hgt $ hg status
M a.py

这实际上是一种相当常见的使用模式。对于一个文件,无论是
-X
选项,还是根据需要搁置和取消搁置,都可能是最简单的方法,但对于DVC,通常情况下,更通用的解决方案是创建另一个分支。我们发现了一个例子(对于bzr,但原则适用)

基本上,您从镜像上游分支的公共分支开始。从那里,您可以分支出一个“localchanges”分支,在这里您可以对main.cpp进行更改。从“本地更改”分支,您可以创建您的功能分支,在这里您可以正常地执行日常工作并提交


当您准备好共享您的更改时,您可以将它们选回到您的第一个分支中,从而获得您刚才所做的更改,而不需要对main.cpp进行本地更改。使用此方法,您甚至可以对main.cpp进行公共修复,而无需签入本地调试黑客。不利的一面是拉入和合并会增加一些额外的复杂性,因为它们必须首先通过上游和本地更改分支,以保持樱桃树的整洁。

如果这段时间更短,我会将其作为对pyfunc答案的注释添加,因为它只是添加了一些信息

显然有两个问题:

  • 允许提交而不提交main.cpp
  • 允许拉取而不丢失对main.cpp的修改
  • 要添加到(1)的提交排除建议中,如果您可以使用TortoiseHg,它将提供一个提交排除列表,而不存在defaults部分的缺点,并且不需要记住是否需要在此特定项目上使用别名。你可以看看我的经验

    第(2)项没有答案。虽然shelve采取了一些步骤,但您将不得不投入一些工作,因为Mercurial无法适应本地更改,就这么简单。我建议使用mq,因为Tortoise提供了与提交对话框的良好集成,但它实际上并不比单文件更改案例中的搁置更简单


    不过,使用shelve或mq并不难,所以我不会太担心它。

    这里有一个相关的问题;Ry4an的答案似乎适用于您:不幸的是,这仍然给我留下了一个修改过的文件,这将阻止一些命令(最重要的是,merge)。然而,正如你所说,我认为这是不可能的。基本上,如果你做一个常规的合并,它也会拉入本地更改分支,这是你不想要的。如果你从分支点开始选择一个樱桃,它只会合并你的特征分支中的补丁。我已经切换了我接受的答案,因为TortoiseHg提交排除列表有点帮助,我不知道。谢谢