Mercurial: как игнорировать изменения в отслеживаемом файле - PullRequest
51 голосов
/ 18 мая 2010

У меня есть файл с настройками базы данных в моем проекте, для которого установлены некоторые значения по умолчанию. Файл отслеживается Mercurial и регистрируется. Поскольку этот файл будет редактироваться с различными значениями на разных машинах разработчика, есть ли способ сообщить Mercurial игнорировать новые изменения в этом файле?

Я попытался добавить файл в файл .hgignore, но, поскольку файл отслеживается, он не игнорируется. Это хорошо и хорошо в других ситуациях, но мне интересно, могу ли я здесь что-нибудь сделать?

Ответы [ 8 ]

27 голосов
/ 01 сентября 2010

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

[defaults]
commit = -X program.conf
26 голосов
/ 18 мая 2010

Использование шаблона файла, безусловно, лучшее решение. Например, если у вас есть файл database.ini, передайте файл database.ini.template и проигнорируйте файл database.ini в .hgignore

12 голосов
/ 20 июля 2011

Мы написали расширение для этого, которое называется exclude . Он автоматически добавит параметры -X к командам, которые их поддерживают, поэтому hg status и hg commit не увидят измененный файл. Он работает, читая файл .hgexclude из корня вашего хранилища, так же, как файл .hgignore. Вы добавляете туда файлы, которые хотите исключить:

syntax: glob
db.conf

Расширение работает довольно хорошо, но есть известная ситуация, когда оно завершается неудачей: слияния и коммит, следующий за слиянием (это описано в вики) Его необходимо улучшить, чтобы сохранить изменения во временном файле, а затем восстановить их. Пожалуйста, свяжитесь с нами, если вам нужна эта функция.

8 голосов
/ 18 мая 2010

Нет действительно автоматизированного процесса, но вы можете попробовать (как в этом SO вопросе ) параметр -X в hg commit:

% hg stat
M myfile
% hg commit -X 'myfile'

(другие решения могут включать полку или hq )

Однако это не «правильное» решение. Я бы порекомендовал версию:

  • файл шаблон
  • скрипт, способный сгенерировать окончательный файл (который вы изменяете, но можете полностью игнорировать)
4 голосов
/ 17 февраля 2011

Если вы используете TortoiseHG, откройте Настройки репо, перейдите в раздел «Зафиксировать» (2-й значок внизу слева) и добавьте имена файлов в список «Автоисключение» справа (~ 3-й из внизу списка).

С https://tortoisehg.readthedocs.io/en/latest/settings.html#commit

2 голосов
/ 04 июня 2013

Вы можете попробовать hg forget. Подробнее см. Официальное руководство об этой же команде . У меня это сработало.

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

2 голосов
/ 18 мая 2010

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

Если ваша система конфигурации поддерживает это, еще проще, если вы можете использовать файл переопределения, который просто переопределяет значения в эталонной копии (например, строка подключения к базе данных). Таким образом, разработчикам нужно только поддерживать очень минимальный локальный набор значений переопределения.

1 голос
/ 10 апреля 2012

Если файл уже отслеживается, вы можете ввести в него команду Забыть. Если вы используете TortoiseHg, просто щелкните файл правой кнопкой мыши во время коммита и выберите Забыть. Файл также должен быть уже в списке игнорирования.

У меня была та же проблема, что и у вас, я сохраняю файл при каждом коммите, хотя он уже находится в списке игнорирования. Я попробовал команду Забудь, и она добилась цели.

...