2014-10-24 4 views
0

Я использую GitHub для многосерверного развертывания, один из которых является производственным сервером, а один - одним из них. Существуют определенные файлы конфигурации (назовем его config.php), которые должны быть специфичными для сервера. Однако для целей резервного копирования нам нужен файл конфигурации производства, оставшийся на сервере GitHub. Тем не менее, на dev-сервере нам нужно продолжать удалять его из процесса git push/pull, чтобы он никогда не загружался на сервер или не записывался в команды git pull. Как я могу это сделать? Добавив его в .gitignore, обработайте этот процесс или он будет реплицироваться на производственный сервер.Git Удалить файл из индексации локально, но не удаленно

Для ссылок с указанием местоположения конфигурационного файла по отношению к .git является /exampledirectory/config.php

ответ

1

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

+0

Обратите внимание, что если вы добавили путь к файлу, уже отслеживаемому в вашем .gitignore, это не повлияет (файл все равно будет находиться в git, а изменения будут по-прежнему отслеживаться до удаления). – Asenar

1

Ответ на ваш вопрос: вы не можете.

Если конфигурационный файл уже отслеживаются мерзавца, вы не можете игнорировать его только локально (поэтому клонированный хранилище является clone: это действительно точно такой же содержание)

Существует 3 варианта:

  • Вы можете удалить файл из git (git rm exampledirectory/config.php --cached && git commit && git push), но тогда вам будет необходимо подключиться к удаленному серверу и восстановить его (всего один раз). Теперь, если вы хотите изменить конфигурацию производства, вам нужно будет войти в систему удаленно.

  • В качестве альтернативы вы можете переименовать файл в config-default.php и, в конечном итоге, добавить один крюк после обновления (и/или другие, локально или удаленно в зависимости от ваших потребностей), чтобы скопировать этот файл в config.php if обнаружено изменение.

* в другой альтернативы (и я использую подобное решение) требует некоторого развития, чтобы изменить путь ваш конфигурационный файл включен, на основе которой окружающая среда вы в настоящее время (производство, развитие или другой), например, если вы добавляете в вашем виртуальном хосте setEnv CUSTOM_ENV develop, вы можете использовать следующий код:

if (isset($_SERVER['CUSTOM_ENV'])) 
{ 
    $config = __DIR__.'/exampledirectory/'.$_SERVER['CUSTOM_ENV'].'/config.php'; 
    if (!file_exists($config)) 
    $config = false; 
} 

if (!$path) 
{ 
    $config = __DIR__.'/exampledirectory/config.php'; 
} 
require_once($config); 

вы можете также базировать определение среды на файл настоящего где-то в вашем диске (пустой файл с именем .debug.inc, ваш IP (127,0. 0.1, если localhost) значение cookie, которое вы установили или что угодно.

В этом примере путь exampledirectory/develop, вероятно, будет находиться в .gitignore, поэтому все разработчики могут самостоятельно настроить свою конфигурацию без каких-либо проблем. И вы можете позже добавить больше среды (preprod, test, ...) и иметь другую конфигурацию в соответствии с тем, что вы хотите проверить.


Кроме того, если в дальнейшем у вас есть развертывание более чем на 2 сервера, вы можете иметь (немного) более сложную систему конфигурации, используя вид иерархического стиля:

Во-первых, загрузки по умолчанию (общий) config somedir/config.php Во-вторых, проверьте, существует ли дополнительный файл конфигурации для текущего env (somedir/[ENV]/config.php), и если есть, включите его тоже.

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

+0

Невозможно удалить один файл из-за того, что его выталкивают/вытаскивают на одну машину, но не все гет-клоны? – user2694306

+0

Нет, и именно поэтому он называется 'clone'. Но вы также можете использовать перехваты (post-update, pre-commit или что-то еще), чтобы имитировать экзотическое поведение, которое вы хотите – Asenar

Смежные вопросы