我可以将mercurial中的文件标记为“从不提交此文件”吗?

时间:2010-12-06 17:04:26

标签: mercurial

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

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

(mods:随意编辑这个问题更简洁)

4 个答案:

答案 0 :(得分:1)

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

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

正如Ry4an建议,阻止包含该文件的提交,然后做一个明确的

hg commit file1, file2, ...

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

我更喜欢这种方法。

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

答案 1 :(得分:1)

这实际上是一种相当常见的使用模式。对于一个文件,-X选项或搁置和取消搁置可能是最简单的方法,但与DVCS一样,更通用的解决方案涉及创建另一个分支。找到一个例子(对于bzr,但原则适用)here

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

当您准备好分享您的更改时,您会将它们选回到您的第一个分支中,从而获得您刚刚进行的更改而无需对main.cpp进行本地更改。使用这种方法,您甚至可以在不检查本地调试黑客的情况下对main.cpp进行公开修复。缺点是拉取和合并会有一些额外的复杂性,因为它们必须首先通过上游和本地更改分支才能保持樱桃酱干净。

答案 2 :(得分:1)

如果这个更短,我会把它作为对pyfunc答案的评论添加,因为它只是添加了一些信息。

显然有两个问题:

  1. 允许提交而不提交main.cpp
  2. 允许拉动而不会丢失对main.cpp的修改
  3. 要添加到(1)的提交排除建议,如果您可以使用TortoiseHg,它提供了一个提交排除列表,没有默认部分的缺点,也无需记住是否需要在此特定项目上使用别名。您可以阅读我的体验here

    (2)没有答案。虽然搁置需要几个步骤,但你将不得不投入一些工作,因为Mercurial无法通过局部变化来实现,就这么简单。我建议mq,因为Tortoise提供了与提交对话框的良好集成,但它实际上并不比在一个文件更改的情况下搁置更简单。

    但是,使用搁架或mq并不难,所以我不会太担心它。

答案 3 :(得分:0)

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

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

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