Git Удалить файл из индексации локально, но не удаленно

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

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

2 ответа

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


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

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

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

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

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

* другая альтернатива (и я использую аналогичное решение) требует некоторой разработки, чтобы изменить способ включения вашего конфигурационного файла на основе той среды, в которой вы сейчас находитесь (производство, разработка или другое): например, если вы добавили в свой локальный 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 где-то на вашем диске (пустой файл с именем .debug.inc, ваш ip (127.0.0.1 при локальном .debug.inc), значение cookie, которое вы установили или что угодно.

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

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

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

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

licensed under cc by-sa 3.0 with attribution.