2012-12-11 38 views
1

只有在提供文件名时才有使用hg commit命令的方法吗?只允许使用特定文件名的Mercurial提交

这应该工作: hg commit file1 file2

这不应该: hg commit

我不想让人误犯这不应该被COMMITED文件。

+0

存储库挂钩? – 0xC0000022L

+0

我看着它,但我不认为你可以检查你给hg命令的参数 – Subbeh

回答

4

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

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

  1. 人们文件添加到不应该添加
  2. 人们改变这种状况不应该被改变的文件,然后提交库他们

如果是第一个,那么您应该将文件移出工作副本,或者将其添加到.hgignore文件中。该文件用于指定文件(或*.obj等文件格式),该文件应该被诸如hg statushg commit --addremove等命令忽略。

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

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

+0

感谢您的回答史蒂夫。我只想提交某些文件的原因是我只想将这些文件推送到中央存储库。尚未准备好的文件或没有更改集的一部分的文件需要保留,如果这样做有意义的话。 – Subbeh

+1

我认为提及“shelve”和“record”扩展名的答案更像是你然后寻找。我会使用'shelve'扩展名隐藏您在提交之前不想提交的更改。无论哪种方式,我认为它会在工作流程中引入很多麻烦,强制在命令行上指定名称。 –

2

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

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

但是我个人会考虑改变你的工作流程,做一些小的修改并定期提交。你的问题表明你正尝试以几乎基于文件的方式使用Mercurial(àCVS(或Subversion?)),而Mercurial是基于变更集的,整个处理库的状态。

+0

谢谢,我认为记录延伸将帮助我做到这一点。您对工作流程是正确的,但我使用非标准方式使用Mercurial,因为我使用它来保持我们的DTAP街道包含Unix shell脚本。 – Subbeh

2

这其实很简单。您可以通过将commit定义为自身的别名来实现,但是使用明确的参数。在你的hgrc文件的[alias]部分,添加以下内容:

commit = commit $1 

这仍然可以处理多个参数:他们只是附加在别名扩展结束。但是,如果你尝试无参数的承诺,你会得到类似这样的错误:

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

有了更详尽的别名,你可以给你的自己的错误信息。

相关问题