Как оформить файл конфигурации и переименовать его с помощью mercurial? - PullRequest
1 голос
/ 30 января 2011

Как мне сказать mercurial копировать файл из /home/configs/config.ini в мой локальный клон каждый раз, когда я запускаю hg clone / home / hg / repo1, не отслеживая его?

Например

> ls -l /home/hg/repo1
  file_one.py
  file_two.py

> hg clone /home/hg/repo1 /home/me/repo1
> cd /home/me/repo1
> ls -l /home/me/repo1
  file_one.py
  file_two.py
  config.ini

Спасибо, Martin

Ответы [ 4 ]

2 голосов
/ 30 января 2011

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

Крюк будет выглядеть так:

[hooks]
post-clone = cp -i config.ini.sample config.ini

Как отметил Пол Фишер, лучше использовать .sample, который находится в репо, чем что-то вроде /home/configs/config.ini, который находится вне репо.

Проблема, как указывает VonC, заключается в том, что хуки не копируются на клонов - и на то есть веская причина: если клонирование также приводит к хукам, то я бы добавил post-clone = rm -rf ~, что действительно разрушит твой день.

Так что, если вы используете крючок, обходной путь - это поместить крюк где-нибудь за пределами репо. В корпоративной среде вы можете сделать это в файле /etc/mercurial/hgrc на всех системах, что, если у вас есть приличные настройки ИТ, они могут сделать централизованно. Поскольку это звучит так, как будто вы уверены, что существует каталог пользователя / home / configs, похоже, вы говорите о том, что все клоны находятся на одной машине, и в этом случае это хороший вариант для вас. Однако в более децентрализованной среде вы возвращаетесь к тому, что каждый человек вручную устанавливает желаемый хук в своем собственном ~/.hgrc, и в этот момент вы можете просто сделать так, чтобы он сделал копию самостоятельно.

Одной идеей, заслуживающей рассмотрения , является проверка того, имеет ли интерпретация вашего config.ini файла директиву, подобную include? Тогда вы можете получить клонированный config.ini выглядит так:

... some stuff
%include /home/configs/config.ini
... more stuff

В этом случае копия не требуется вообще. Например, у Mercurial есть директива include, которая работает так: http://www.selenic.com/mercurial/hgrc.5.html#syntax

2 голосов
/ 30 января 2011

Предпочтительный способ сделать это - отследить файл, скажем, config.ini.example, а затем скопировать его в config.ini и включить config.ini в ваш файл .hgignore.Вы также можете заставить ваше приложение генерировать config.ini при первом запуске, если оно еще не существует.

Нет (документированных) ловушек для действия клонирования, потому что когда вы клонируете, вы создаете новый репозиторий,Поскольку это репо совершенно новое, у него нет файла .hgrc для определения хуков.То есть, вы запускаете хуки из репозитория new , а не из old .

1 голос
/ 30 января 2011

Одним из способов было бы определить ловушку, подобную группе изменений , в которой вы выполняете копирование сразу после клона.
Единственная проблема: эта ловушка не будет работать с жестко связанными путями, каксообщается в выпуске 1602 .

0 голосов
/ 30 января 2011

Похоже, вам просто нужно жестко связать файл, чтобы при каждом запуске hg update в /home/me/repo1 также обновлялся файл в /home/configs:

rm /home/configs/config.ini
ln /home/me/repo1/config.ini /home/configs/config.ini

Обратите внимание, что выне нужно удалять клон и отклонять, чтобы обновить вашу рабочую копию.Просто используйте hg pull и hg update.

...