Mercurial.Контроль версий и развертывание.Разные конфигурационные файлы.Как? - PullRequest
2 голосов
/ 03 января 2012

У меня есть настройки следующим образом.

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

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

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

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

Любые идеи будут с благодарностью. Спасибо

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

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

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

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

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

Спасибо

Ответы [ 3 ]

5 голосов
/ 03 января 2012

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

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

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

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

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

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

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

1 голос
/ 03 января 2012

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

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

config.local.php
config.server.php

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

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

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


EDIT:

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

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

0 голосов
/ 03 января 2012

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

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