Как навсегда указать Mercurial не фиксировать измененный файл с версией?

У меня в корне репозитория есть файл default.config. Я настроил его для своих собственных настроек и не хочу его фиксировать. Всегда. Какие у меня другие варианты, кроме commit -X "^default\.config$"?

Я добавил ^default\.config$ в .hgignore, но он по-прежнему отображается в выводе hg status -mard.

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


person user443854    schedule 22.10.2013    source источник


Ответы (2)


Следуй этим шагам:

  • Скопируйте файл куда-нибудь за пределы вашего рабочего каталога
  • Удалите файл с hg rm default.config и зафиксируйте изменения
  • Скопируйте обратно ваш файл в рабочий каталог

В качестве хорошей практики вы можете добавить файл с именем default.config.template или что-то еще, что зафиксировано в репозитории. Этот файл содержит какие-то значения по умолчанию или комментарии о том, как его использовать, и другие пользователи / разработчики могут скопировать этот файл в default.config, если они используют ваш проект.

person akluth    schedule 22.10.2013
comment
Извините, это не работает. Если я hg remove и затем нажму на него, я затрону (многих) других пользователей, не так ли? - person user443854; 22.10.2013
comment
Да, можно - если только они не тянут и никогда не обновляют свой код ;-) Но это единственный способ сделать. Вы не можете игнорировать файл, который уже является частью вашего рабочего дерева. - person akluth; 22.10.2013
comment
hg Forgot перестанет отслеживать файл, но оставит его на месте. Однако, как упоминалось ранее, если другие люди получат ваши изменения, файл будет удален для них. Правильный способ, упомянутый akluth и Мартином, - это зафиксировать шаблон, удалить файл default.config и добавить его в .hgignore. - person David Stockton; 01.11.2013

У Akluth есть правильный ответ: зафиксируйте файл шаблона в своем репозитории, а затем скопируйте его на настоящее имя в каждой рабочей копии. Если файл конфигурации поддерживает это, используйте директиву include для загрузки файла шаблона из реального файла конфигурации. Что-то вроде

// default.config
//
// load defaults from versioned template file

#include "default.config.template"

// override defaults with my settings
db_hostname = localhost
db_user = me

Альтернативой является использование -X с каждой командой, как вы предлагаете. Существует расширение исключения, которое реализует эту идею. Не забудьте прочитать предостережения - это не работает при слиянии, потому что вы не можете исключить файлы при фиксации слияния. Расширение необходимо будет расширить для обработки этого случая, возможно, отложив изменение перед слиянием и убрав его после.

Это наводит на мысль о другой стратегии, аналогичной использованию MQ, как вы предлагаете: используйте новое расширение полки в наборе pre- и post- перехватчиков, чтобы убрать / убрать файл с полки до / после каждой операции. Думаю, это может сработать, хотя в реальной жизни я не пробовал.

person Martin Geisler    schedule 22.10.2013