Ответ 1
Использование шаблона файла, безусловно, является лучшим решением.
Например, если у вас есть файл database.ini
, зафиксируйте файл database.ini.template
и игнорируйте database.ini в .hgignore
У меня есть файл с настройками базы данных в моем проекте, который я установил для некоторых значений по умолчанию. Файл отслеживается Mercurial и проверяется. Поскольку этот файл будет отредактирован разными значениями различных машин для разработчиков, есть ли способ, которым я могу сказать Mercurial игнорировать новые изменения в этом файле?
Я попытался добавить файл в файл .hgignore
, но поскольку файл отслеживается, он не игнорируется. Это хорошо и хорошо в других ситуациях, но мне интересно, есть ли здесь что-то, что я могу сделать здесь?
Использование шаблона файла, безусловно, является лучшим решением.
Например, если у вас есть файл database.ini
, зафиксируйте файл database.ini.template
и игнорируйте database.ini в .hgignore
Если вы всегда хотите проигнорировать файл, вы можете добавить параметр -X
по умолчанию для commit
в конфигурационный файл .hg/hgrc
:
[defaults]
commit = -X program.conf
Мы написали расширение для этого, называемое exclude. Он автоматически добавит опции -X
к командам, которые их поддерживают, поэтому hg status
и hg commit
не будут видеть измененный файл. Он работает, читая файл .hgexclude
из корня вашего репозитория, как и файл .hgignore
. Вы добавляете файлы, которые вы хотите исключить:
syntax: glob
db.conf
Расширение работает достаточно хорошо, но есть известная ситуация, когда он терпит неудачу: слияния и фиксация, которая следует за слиянием (это описано в вики). Его нужно будет улучшить, чтобы сохранить изменения в временном файле, а затем восстановить их впоследствии. Пожалуйста, свяжитесь с нами, если вам нужна эта функция.
Нет действительно автоматизированного процесса, но вы можете попробовать (как в этом SO вопрос) вариант -X
на hg commit
:
% hg stat
M myfile
% hg commit -X 'myfile'
(другие решения могут включать полка или hq)
Однако это не "правильное" решение. Я бы предпочел рекомендовать версию:
Если вы используете TortoiseHG, откройте "Настройки для репо", перейдите в раздел "Конец" (второй значок слева) и добавьте имена файлов в список "Автоматическое исключение" справа (от 3-го от внизу в списке).
Обычно вы проверяете ссылочную копию файла и отслеживаете его, а затем разработчики делают копию этого для локальной разработки, вы бы не хотели, чтобы разработчики редактировали файл с контролируемым источником для своих собственных сред.
Если ваша система конфигурации поддерживает его, это еще проще, если вы можете использовать файл переопределения, который просто переопределяет значения в ссылочной копии (например, строка подключения к базе данных). В этом случае разработчикам необходимо сохранить минимальный локальный набор значений переопределения.
Вы можете попробовать hg forget
.
Для получения дополнительной информации см. Официальное руководство о той же команде.
Это сработало для меня.
Я думаю, что-то вроде этого ближе к правильному ответу на оригинальный вопрос Mercurial: как игнорировать изменения в отслеживаемом файле, а не другие, предлагающие шаблон и т.д.
Если файл уже отслеживается, вы можете отправить команду Forget в файл. Если вы используете TortoiseHg, просто щелкните файл правой кнопкой мыши во время фиксации и выберите "Забыть". Файл также должен находиться в списке игнорирования.
У меня была такая же проблема, как у вас, я продолжаю появляться на каждом коммите, хотя это уже в списке игнорирования. Я попробовал команду Forget, и он сделал трюк.
Это может показаться неинтуитивным, но:
hg rm -Af [file]
Два флага вместе утверждают, что файл удален, и что изменения должны быть принудительно (а не удаление должно быть принудительно, как подсказывает подсказка). Справка и документация для флагов A (после) и f (force), по-видимому, не на 100% точны.
Работала для меня в Mercurial 2.0, с оговоркой, что команда архива также не включает файл. Однако, если другие разработчики клонируют репо, это не должно быть проблемой. Они получат исходную версию и не должны удаляться из рабочего каталога.
От: https://www.mercurial-scm.org/pipermail/mercurial/2008-June/019671.html