Меркуриал. Контроль версий и развертывание. Различные файлы конфигурации. Как?

У меня следующая установка.

Частный репозиторий на bitbucket, где я храню «главный» репозиторий. Репозиторий на моем сервере, который действует как «живой» веб-сайт. Репозиторий на моем ноутбуке, который действует как моя рабочая копия.

Мой процесс выглядит следующим образом. Я вношу изменения в файл в моем локальном репозитории. Я передаю их на месте. Я помещаю эти изменения в битбакет. Затем я перетаскиваю эти изменения из своего битбакета на веб-сервер.

Проблема, с которой я столкнулся, заключается в том, что моя локальная копия использует разные параметры конфигурации для баз данных, путей и т.д., поэтому я хочу, чтобы мой файл config.php в bitbucket содержал настройки сервера, а config.php на моем локальном хосте. содержать локальные настройки.

Я считаю, что этого можно достичь с помощью .hgignore, но у меня не было никаких успехов в исследованиях. Проблема, с которой я сталкиваюсь, заключается в том, что я создаю свой файл настроек сервера, помещаю его в битбакет, «забываю» файл в моем локальном репозитории, создаю .hgignore, а затем воссоздаю файл. Однако, когда я «забываю» файл, TortoiseHG замечает и просит меня зафиксировать изменение в битбакете ....

Любые идеи очень приветствуются. Спасибо

Дополнительные очки.

Следуя приведенному ниже совету, я разработал следующую схему:

У меня на ноутбуке есть локальный репозиторий, в котором я редактирую. У меня есть битбакет, который по сути является «основным» репозиторием - если к команде присоединятся другие разработчики, они его клонируют. У меня есть репозиторий в реальном времени на моем веб-хостинге.

В моем репозитории в реальном времени у меня есть файл .hgignore, который игнорирует соответствующие файлы конфигурации. Таким образом, когда я делаю hg pull со своего хоста, он извлекает репозиторий, как и файлы конфигурации localhost, но когда я набираю hg update (для активной рабочей копии), эти файлы игнорируются / не обновляются.

Может ли кто-нибудь уточнить, правильно ли я это понял и подходит ли это для достижения того, чего я хочу?

Спасибо


person Thomas Clowes    schedule 02.01.2012    source источник


Ответы (3)


.hgignore игнорирует файлы, только если они еще не версированы, поэтому я не думаю, что ваша идея в вопросе сработает.

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

  1. Не проверяйте config.php вообще. Вы можете зарегистрировать config.example.php с наиболее распространенными настройками и документ в README, который пользователи должны скопировать в config.php, а затем отредактировать.

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

  3. Как 2, но config.php содержит все настройки по умолчанию, и локальный файл может их изменить.

  4. Зарегистрируйте config.dev.php и config.server.php-файл, содержащий настройки для обеих сред, а затем получите неверсированный config.php, который включает один из указанных выше файлов. Преимущество в том, что сами конфигурации версируются, и вы можете их обновлять.

Какой из этих вариантов выбрать или сделать другой вариант, зависит от вашей среды.

person Laurens Holst    schedule 03.01.2012
comment
Я использовал hg remove, чтобы избавиться от файлов конфигурации в клонированном репозитории, который является моей «живой» копией. Затем я создал файл .hgignore перед воссозданием файла конфигурации. Насколько я понимаю, теперь, когда я обновляю, из-за hgignore он не будет обновлять эти файлы? Итак, если я правильно понимаю, я, по сути, добиваюсь того же, но не имею преимуществ версионных конфигураций ... Это правильно? Спасибо - person Thomas Clowes; 03.01.2012
comment
Re. файл игнорирования звучит примерно правильно, формулировка в вашем вопросе создавала впечатление, что вы ожидали, что .hgignore будет работать с файлом, который был извлечен (и, следовательно, версирован), но если вы сначала удалите его, он будет проигнорирован нормально. Обратите внимание, что файл, вероятно, будет удален при извлечении, поэтому вам нужно восстановить его после извлечения, и с этого момента он будет работать. - person Laurens Holst; 03.01.2012
comment
Re. варианты, я думаю, вы в основном выполнили то, что описывает вариант 1, за исключением того, что я бы рекомендовал проверить пример конфигурации, чтобы людям было легче ее настраивать. Вариант 1 имеет неверсированную конфигурацию (но пример), варианты 2 и 3 имеют частично версионные конфигурации, а вариант 4 имеет полностью версионные конфигурации. На самом деле все хорошо, у всех есть свои плюсы и минусы, так что все зависит от того, что вы хотите делать. - person Laurens Holst; 03.01.2012

Основная идея работы с контролем версий и разными файлами конфигурации всегда одна и та же, но я недостаточно знаю PHP, чтобы дать подробный ответ, как это можно сделать в PHP.
Я ответил аналогичный вопрос для .net / Visual Studio несколько месяцев назад, поэтому я просто дам вам ссылку на этот ответ и попытаюсь описать основную идею снова, но на этот раз не зависящий от языка:

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

config.local.php
config.server.php

«Настоящего» config.php нет в репозитории, и он должен быть в .hgignore, поэтому он никогда не не будет в репозитории.

После извлечения вам нужно запустить что-то, что копирует один из этих файлов («правильный» в зависимости от текущей среды, локальной или серверной) в config.php.

И именно на эту последнюю часть я не могу ответить подробно, потому что я не знаю, как это сделать в PHP и / или на веб-сервере, потому что я парень .net / Windows. < br> Насколько мне известно, развертывание сайта PHP - это просто копирование файлов на веб-сервер, поэтому нет шага «сборка / компиляция», на котором можно было бы скопировать / переименовать файл конфигурации (где я бы это сделал в .net). Поправьте меня, если я ошибаюсь ...


РЕДАКТИРОВАТЬ:

Томас, я не уверен, правильно ли я понял ваши правки. Ваш «локальный» репозиторий на вашем ноутбуке и ваш «живой» репозиторий на вашем веб-сервере в основном являются клонами вашего «основного» репозитория на Bitbucket, верно?
Если да, вы говорите, что у вас есть разные .hgignore файлы в разных клонах ?? Это то, что меня смущает.
Независимо от того, как вы на самом деле это делаете (есть несколько возможностей работать с файлами конфигурации, см. Ниже), файл .hgignore должен быть одинаковым во всех клонах вашего репозитория.

Таким образом, все ваши репозитории (независимо от того, какой клон на каком компьютере) должны содержать один (и) один (и) файл (ы) конфигурации.
Затем вам нужно только убедиться, что разные конфигурации используются в разных средах. В ответе Лорен Холст уже есть отличный список различных способов, поэтому я просто укажу вам на него. < br> Как уже сказала Лоуренс Холст, мы не можем сказать, какой из этих способов лучше для вас - это зависит от вашей среды.

person Christian Specht    schedule 02.01.2012
comment
Большое спасибо за предложение. Пожалуйста, смотрите мои правки выше. На концептуальном уровне это кажется правильным? Спасибо - person Thomas Clowes; 03.01.2012
comment
@ThomasClowes: Я не уверен. Пожалуйста, прочтите пояснения в моем ответе. - person Christian Specht; 03.01.2012

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

$domain = $_SERVER['HTTP_HOST'];
if ($domain=="localhost") {
    //local copy config
}
else if ($domain=="yourdomain.com") {
    //webserver config
}
person CodeFuze    schedule 02.01.2012