Mercurial (hg) фіксує лише певні файли


119

Я намагаюся ввести лише певні файли з Mercurial. Через те, що hg має автоматичне додавання кожного разу, коли я намагаюся зробити зміни, він хоче зафіксувати всі файли. Але я цього не хочу, оскільки певні файли ще не готові.

є

hg commit -I thefile.foo

але це лише для одного файлу. Кращим способом для мене буде, якщо я можу вимкнути автоматичне додавання, як у Git. Чи можливо це?


5
використовувати розширення запису? або ви можете вказати файли в командному рядкуhg ci foo bar baz
tonfa

4
@tonfa, опублікуйте коментар як відповідь
Андрій Дзахель

Будь ласка, не скасовуйте своїх публікацій.
Глорфіндель

Чому ти гадаєш таким приємним питанням чувак?
Praveen Kumar Purushothaman

Відповіді:


155

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

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


Що таке поведінка "автоматичного додавання"? Чи використовувався hg для автоматичного додавання файлів? Тому що тепер ви повинні це зробити явно, інакше вони будуть відслідковуватися.
квітня

1
@mpen Я думаю, що він означає, що gh автоматично додає кожен модифікований файл до комісії, на відміну від git, в який вам потрібно вручну додати змінені файли до наступного комітету, і може залишити деякі модифіковані файли без відключення
simpleuser

24

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

Якщо ви хочете створити багато файлів і виключити лише кілька файлів, використання -Xзручніше.

Наприклад, дано сховище, що містить "file_1", "file_2" та "file_3", наступні еквівалентні, але останнє простіше / швидше набрати:

hg commit file_1 file_2
hg commit -X file_3

8

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

Ось приклад того, як виглядає інтерфейс. Зауважте, що це старий скріншот (насправді crecord), тому інтерфейс трохи змінився (але основи такі ж). скріншот крекорд

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

[ui]
interface = curses
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.