Файл Mercurial ignore

Я пытаюсь заставить Mercurial игнорировать файл конфигурации, но я не могу заставить его работать.

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

Я попытался создать .hgignore в корне моего клона, но Mercurial флаги файла с ?, и я его фиксирую или не продолжаю регистрировать мои изменения конфигурации.

Я создаю файл .hgignore в неправильном месте, нужно ли это делать? Нужно ли его создавать до того, как я запустил репозиторий на сервере?

Ответ 1

  • .hgignore не нужно создавать до init
  • Этот конфигурационный файл будет использоваться другими, вам лучше зафиксировать .hgignore, чтобы другим не приходилось его создавать, но это не нужно для того, чтобы mercurial игнорировал ваши локальные файлы (см. пример).
  • Да .hgignore должен находиться в корневом каталоге

Простой пример.

Инициировать репо:

$ mkdir test 
$ cd test 
$ hg init 

Создать файл

$ touch foo 
$ hg st 
? foo 

Теперь создайте .hgignore в корневом каталоге вашего репо:

$ echo 'foo' > .hgignore 

foo теперь игнорируется:

$ hg st 
? .hgignore 

Обратите внимание, что для этого не требуется выполнение .hgignore.

Немного сложнее

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

Создание конфигурации и фиксация ее

$ touch config
$ hg ci config -Am 'adding conf'

Игнорировать:

$ echo 'config' >> .hgignore

Зафиксировать .hgignore:

$ hg ci .hgignore -Am '.hgignore'

Затем, если вы клонируете репо:

$ cd ..
$ hg clone test other-user
$ cd other-user

и измените конфигурацию:

$ echo 'new config param' >> config

то hg покажет изменения:

$ hg st
M config

Как справиться с этим?

Вероятно, вы захотите, чтобы в репозитории был установлен основной файл конфигурации по умолчанию, то есть версия, global.cfg

И вы попросите пользователей создать local.cfg, где они будут размещать свои локальные настройки. И ваш script будет источник local.cfg, если он присутствует: локальные настройки переопределяют глобальные. Конечно, добавьте строку в .hgignore, чтобы игнорировать local.cfg;)

Альтернатива: нет глобального файла конфигурации, только config.example, который пользователи копируют и изменяют локально. Кон таким образом вы не будете легко отслеживать изменения между версиями.

Ответ 2

Даже если вы проигнорировали файлы, Mercurial будет отслеживать их после их добавления в репозиторий.

Чтобы удалить файл конфигурации из репозитория, вы можете использовать

hg remove -Af file.cfg

Это приведет к удалению файла из репозитория (после его фиксации) без удаления локального файла. См. hg help remove Однако теперь в репо есть запись, и Mercurial удалит этот файл, когда ваш или кто-либо еще обновит эту версию.

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

hg rename file.cfg file.cfg.example

Ответ 3

Добавьте сам файл .hgignore в файл .hgignore:

syntax: glob

.hgignore

или просто проверьте файл .hgignore на свой локальный клон...