有没有办法在提供文件名时使用hg commit命令?
这应该有效:
hg commit file1 file2
这不应该:
hg commit
我不希望别人错误地提交那些不应该提交的文件。
答案 0 :(得分:4)
我不确定这是否可行,但听起来您的工作流程和/或Mercurial的知识有问题,所以我将回答如何在Mercurial中管理此问题。
当你说“提交不应该提交的文件”时,你是什么意思?我可以得到这个短语的两个含义之一:
如果是第一个,那么您应该将文件移出工作副本,或者将它们添加到.hgignore
文件中。此文件用于指定*.obj
和hg status
等命令应忽略的文件(或文件模式,例如hg commit --addremove
)。
如果是第二个,那么您和您的团队应该在提交之前检查他们所做的更改。他们应该使用hg status
来检查哪些文件已被更改,然后使用hg diff
,如果他们看到他们可能没有打算提交的内容。如果你养成了更频繁提交的习惯,只需要一次修复一个问题,或者将新功能分解为阶段并在每个阶段之后提交,这就更容易了。
另一个可能的问题是,您有一个配置文件,开发人员经常会更改该配置文件,但不应该将其提交到存储库。此问题的典型解决方案是您在存储库中有一个模板配置文件,每个人在克隆存储库时都需要将其复制到正确的名称。
答案 1 :(得分:2)
如果您的工作目录包含多个特定更改(我认为只能提交特定文件的唯一原因),那么单个文件可能包含多个更改 - 有些是您要提交的,有些则不是
您可以考虑使用Record extension或Shelve之类的内容,而不是限制应该检入哪些文件。两者都允许您指定提交的具体更改,但方式略有不同(我认为Record可能适合您的需要)。
但我个人会考虑更改您的工作流程以进行小的更改并定期提交。您的问题表明您试图以几乎基于文件的方式使用Mercurial(例如CVS(或Subversion?)),而Mercurial是基于变更集的,将整个存储库的状态视为一个整体。
答案 2 :(得分:2)
[alias]
部分中,添加以下内容:
commit = commit $1
这仍然可以处理多个参数:它们只是附加到别名扩展的末尾。但是如果你试图在没有参数的情况下提交,你将会收到类似这样的错误:
abort:$ 1:没有这样的文件或目录
使用更复杂的别名,您可以提供自己的错误消息。