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