允许Mercurial中的提交仅使用特定的文件名

时间:2012-12-11 12:58:08

标签: mercurial hook commit hgrc

有没有办法在提供文件名时使用hg commit命令?

这应该有效: hg commit file1 file2

这不应该: hg commit

我不希望别人错误地提交那些不应该提交的文件。

3 个答案:

答案 0 :(得分:4)

我不确定这是否可行,但听起来您的工作流程和/或Mercurial的知识有问题,所以我将回答如何在Mercurial中管理此问题。

当你说“提交不应该提交的文件”时,你是什么意思?我可以得到这个短语的两个含义之一:

  1. 人们将文件添加到不应添加的存储库
  2. 人们更改不应更改的文件然后提交
  3. 如果是第一个,那么您应该将文件移出工作副本,或者将它们添加到.hgignore文件中。此文件用于指定*.objhg status等命令应忽略的文件(或文件模式,例如hg commit --addremove)。

    如果是第二个,那么您和您的团队应该在提交之前检查他们所做的更改。他们应该使用hg status来检查哪些文件已被更改,然后使用hg diff,如果他们看到他们可能没有打算提交的内容。如果你养成了更频繁提交的习惯,只需要一次修复一个问题,或者将新功能分解为阶段并在每个阶段之后提交,这就更容易了。

    另一个可能的问题是,您有一个配置文件,开发人员经常会更改该配置文件,但不应该将其提交到存储库。此问题的典型解决方案是您在存储库中有一个模板配置文件,每个人在克隆存储库时都需要将其复制到正确的名称。

答案 1 :(得分:2)

如果您的工作目录包含多个特定更改(我认为只能提交特定文件的唯一原因),那么单个文件可能包含多个更改 - 有些是您要提交的,有些则不是

您可以考虑使用Record extensionShelve之类的内容,而不是限制应该检入哪些文件。两者都允许您指定提交的具体更改,但方式略有不同(我认为Record可能适合您的需要)。

但我个人会考虑更改您的工作流程以进行小的更改并定期提交。您的问题表明您试图以几乎基于文件的方式使用Mercurial(例如CVS(或Subversion?)),而Mercurial是基于变更集的,将整个存储库的状态视为一个整体。

答案 2 :(得分:2)

实际上,它非常简单。您可以通过将commit定义为自身的别名来实现,但使用显式参数。在hgrc文件的[alias]部分中,添加以下内容:

commit = commit $1

这仍然可以处理多个参数:它们只是附加到别名扩展的末尾。但是如果你试图在没有参数的情况下提交,你将会收到类似这样的错误:

  

abort:$ 1:没有这样的文件或目录

使用更复杂的别名,您可以提供自己的错误消息。