Подтвердить что ты не робот

Mercurial: как игнорировать изменения в отслеживаемом файле

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

[defaults]
commit = -X program.conf

Ответ 3

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

syntax: glob
db.conf

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

Ответ 4

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

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

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

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

  • шаблон файла
  • a script способен генерировать окончательный файл (который вы изменяете, но можете вообще игнорировать)

Ответ 5

Если вы используете TortoiseHG, откройте "Настройки для репо", перейдите в раздел "Конец" (второй значок слева) и добавьте имена файлов в список "Автоматическое исключение" справа (от 3-го от внизу в списке).

От http://tortoisehg.bitbucket.io/manual/0.9/commit.html

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

У меня была такая же проблема, как у вас, я продолжаю появляться на каждом коммите, хотя это уже в списке игнорирования. Я попробовал команду Forget, и он сделал трюк.

Ответ 9

Это может показаться неинтуитивным, но:

hg rm -Af [file]

Два флага вместе утверждают, что файл удален, и что изменения должны быть принудительно (а не удаление должно быть принудительно, как подсказывает подсказка). Справка и документация для флагов A (после) и f (force), по-видимому, не на 100% точны.

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

От: https://www.mercurial-scm.org/pipermail/mercurial/2008-June/019671.html