Mercurial игнорировать файл - PullRequest
65 голосов
/ 08 июня 2009

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

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

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

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

Ответы [ 3 ]

69 голосов
/ 08 июня 2009
  • .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

Commit .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, где они разместят свои локальные настройки. И ваш скрипт будет local.cfg, если он присутствует: локальные настройки переопределяют глобальные. Конечно, добавьте строку к .hgignore, чтобы игнорировать local.cfg;)

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

29 голосов
/ 16 октября 2009

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

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

hg remove -Af file.cfg

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

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

hg rename file.cfg file.cfg.example
15 голосов
/ 08 июня 2009

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

syntax: glob

.hgignore

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

...