Есть ли в Mercurial опция игнорирования при фиксации?

Есть ли способ игнорировать изменения некоторых файлов при фиксации с помощью mercurial?

У меня есть конкретная ситуация, когда у нас есть файл oracle tnsnames.ora по умолчанию, который указывает на 127.0.0.1, но некоторые разработчики изменят его, чтобы указать на другие системы, но мы не хотим изменять файл по умолчанию.

В Subversion я просто добавил это в список изменений игнорирования при фиксации. Есть ли способ сделать это в Mercurial?


person Nick Randell    schedule 19.05.2009    source источник


Ответы (4)


Если файлы, которые вы хотите исключить из команды «hg commit», уже «отслеживаются», вам следует использовать опцию -X. Шаблон, переданный в -X, довольно гибкий, что позволяет, например, запускать:

% hg stat
A etc/foo.conf
M src/bar.c
M lib/libbar/loader.c
% hg commit -X '**.conf'

чтобы избежать фиксации любого файла с расширением ".conf", независимо от того, насколько глубоко в дереве исходных текстов он находится. В показанном выше рабочем пространстве это зафиксирует «src / bar.c» и «lib / libbar / loader.c», но не «etc / foo.conf».

Чтобы исключить несколько шаблонов имен файлов, используйте несколько параметров -X, например:

% hg commit -X '**.conf' -X '**.sh'
person Giorgos Keramidas    schedule 22.05.2009
comment
Информацию о шаблонах стиля **. Conf см. В справке по шаблонам hg. - person Martin Geisler; 31.05.2009
comment
Есть ли способ сделать это постоянным? Я не хочу использовать -X при каждой фиксации. - person Kugel; 07.01.2013
comment
@Kugel Не похоже. Mercurial кажется мне паршивым выбором для кодовой базы, состоящей примерно из 20 файлов конфигурации, каждый из которых содержит специфический для пользователя материал. Мне не нужно писать сценарии, чтобы контроль версий работал на меня, а не против меня. И нет, 20 конфигурационных файлов тоже не моя идея. Полагаю, этот парень тоже выбрал Mercurial. - person Erik Reppen; 18.02.2013
comment
@Kugel: можно создать псевдоним для команды с тем же именем, как описано в selenic.com/mercurial/hgrc.5.html#alias, таким образом переопределив его. Несмотря на то, что говорят, что это почти всегда плохая идея, это может быть так, когда это не так. - person Andriy K; 03.09.2013
comment
ты не можешь попробовать что-нибудь в .hgignore? - person rkm; 12.09.2013
comment
Это сработало для меня, но после этого я не мог выполнить выборку hg, потому что он говорит, что у меня все еще есть незавершенные незавершенные изменения. .hgignore не поможет, потому что он уже отслеживается. hg Forgot удаляет его из репозитория, что нежелательно для чего-то вроде конфигурационного файла строки подключения. - person David C; 17.07.2014
comment
Это вместе с некоторыми патчами - вот как я могу обойти такую ​​проблему. Однако будьте осторожны, если вы используете TortoiseHG, поскольку он, кажется, фиксируется со списком изменений файла, в основном переопределяя файл конфигурации. Если я где-то ошибся, укажите на это :-) - person Kevin Shea; 27.08.2015
comment
Я узнал, что кавычки очень важны для опции -X. Если у вас их нет, mercurial обрабатывает ваши глобусы, как если бы они были указанными файлами для фиксации. - person Jay Sheridan; 15.12.2017

Традиционно это решается не версией самого файла, а версией его копии в качестве шаблона для использования другими.

Итак, вы должны hg mv tnsnames.ora tnsnames.ora-template, затем выполнить фиксацию, затем сделать прямую копию tnsnames.ora-template для файловой системы в tnsnames.ora и добавить tnsnames.ora в файл .hgignore.

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

person Zed    schedule 21.05.2009
comment
Итак, если у вас есть app.config и вы переименуете его в app.config-template, в репозитории больше не будет app.config. Это вызовет проблемы с автоматической сборкой. Я предполагаю, что процесс сборки должен быть проинформирован об этом «шаблоне» и переименовать его обратно. Это не так уж и здорово. - person AndyM; 29.06.2011
comment
Вы не хотите переименовывать, вы хотите копировать и изменять. Вы можете сделать это либо из своих сценариев автосборки, либо с помощью ловушки, но в любом случае, если у вас есть файлы, которые будут отличаться от клона к клону, где-то нужно будет применить некоторый интеллект. - person Zed; 08.07.2011

Вы можете использовать псевдоним commit для чего-то вроде 'hg commit -X excluded_file.ext'. Я никогда не использовал mercurial, поэтому я просто просматриваю страницу руководства здесь.

person Josh Matthews    schedule 19.05.2009

Найдите файл .hgignore в документации Mercurial.

Вот пример игнорируемого файла.

       # use glob syntax.
       syntax: glob

       *.elc
       *.pyc
       *~

       # switch to regexp syntax.
       syntax: regexp
       ^\.pc/
person 0x6adb015    schedule 19.05.2009
comment
Файл tnsnames.ora уже зарегистрирован. Я хочу игнорировать мои локальные изменения, потому что они предназначены только для моей машины. Вот почему .hgignore не работает - person Nick Randell; 20.05.2009