Mercurial (hg) фиксирует только определенные файлы - PullRequest
115 голосов
/ 09 марта 2010

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

Есть

hg commit -I thefile.foo

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

Ответы [ 4 ]

149 голосов
/ 01 декабря 2011

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

$ hg commit foo.c foo.h dir/

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

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

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

$ 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 для этой цели, хотя, я думаю, достаточно просто указать имена файлов в командной строке.

22 голосов
/ 14 февраля 2015

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

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

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

hg commit file_1 file_2
hg commit -X file_3
6 голосов
/ 21 декабря 2017

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

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

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

[ui]
interface = curses
0 голосов
/ 18 апреля 2011

Как указано в этом вопросе о переполнении стека , самый простой способ сделать это с помощью hg shelve.

...