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
Ответ 3
Как было предложено в этом вопросе, самый простой способ сделать это - hg shelve
.
Ответ 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