Mercurial (hg) фиксирует только определенные файлы

Я пытаюсь зафиксировать только определенные файлы с Mercurial. Из-за hg, имеющего автоматическое добавление, когда я пытаюсь совершить изменение, он хочет зафиксировать все файлы. Но я не хочу этого, потому что некоторые файлы еще не готовы.

Существует

hg commit -I thefile.foo

но это только для одного файла. Лучше для меня было бы, если бы я мог отключить автозаполнение, как в Git. Возможно ли это?

Ответ 1

Вы можете указать файлы в командной строке, как пишет tonfa:

$ hg commit foo.c foo.h dir/

Это просто работает и то, что я делаю все время. Вы также можете использовать флаг --include, который вы нашли, и можете использовать его несколько раз, например:

$ hg commit -I foo.c -I "**/*.h"

Вы можете даже использовать fileset для выбора файлов, которые вы хотите совершить:

$ hg commit "set:size(1k - 1MB) and not binary()"

Нет настройки, которая отключит поведение автоматического добавления и сделает работу Mercurial, например, Git. Тем не менее, расширение mq может представлять интерес. Это расширенное расширение, но оно позволяет вам делать

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Я действительно не использую MQ для этой цели сам, хотя, поскольку я думаю, что достаточно просто указать имена файлов в командной строке.

Ответ 2

Если вы хотите зафиксировать несколько файлов и исключить многие другие, явным образом перечисляю файлы, которые вы хотите совершить. -I нужен только в том случае, если вы хотите использовать шаблоны вместо файлов.

Если вы хотите зафиксировать много файлов и исключить только несколько файлов, использование -X более удобно.

например. с учетом репозитория, содержащего "file_1", "file_2" и "file_3", следующие эквиваленты, но последнее проще/быстрее:

hg commit file_1 file_2
hg commit -X file_3

Ответ 4

Начиная с версии 3.8 вы также можете использовать hg commit --interactive для выбора файлов (до 3.8 вы можете использовать расширение crecord для аналогичной функциональности). Флаг --interactive (или просто -i) заставит hg запрашивать файлы, которые вы хотите включить в commit. В качестве дополнительного бонуса вы можете даже включать/исключать куски в файлах.

Вот пример того, как выглядит интерфейс. Обратите внимание, что это старый скриншот (собственно, на самом деле), поэтому интерфейс немного изменился (но основы те же). crecord screenshot

Примечание. Чтобы получить этот интерфейс, вам нужен интерфейс curses. Вы можете сделать это для одиночного запуска с помощью hg commit --config ui.interface=curses --interactive или, вообще говоря, добавив следующее к вашему .hgrc:

[ui]
interface = curses