Как мне помешать Git перезаписать мой файл подключения к БД?

#database #git #gitignore

#База данных #git #gitignore

Вопрос:

У меня есть файл «db-connection.php » это должно отличаться для каждой версии моего сервера. (Localhost, Dev и Production). Сначала я подумал, что .gitignore это ответ, но после долгих усилий и исследований я понял, что .gitignore работает только с неотслеживаемым файлом: например, файлы, которых еще нет в репозитории.

По очевидным причинам версия localhost, которую я использую с xampp, требует, чтобы файл БД находился в репозитории. Конечно, это означает, что каждый раз, когда я отправляю его в Dev, это разрушает соединение с Dev db.

Есть ли способ сообщить .git «Да, я понимаю, что этот файл существует, но все равно оставьте его в покое»?

Ответ №1:

Это распространенная проблема, и есть два решения, в зависимости от ваших потребностей.

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

Если этот файл действительно должен зависеть от системы пользователя (скажем, он содержит личные учетные данные разработчика или системные пути), тогда вам следует отправить файл шаблона и скопировать его на место с помощью скрипта (который может заполнить соответствующие данные для пользователя). В этом случае db-connection.php также будет проигнорировано и удалено из репозитория.

Есть две вещи, которые люди пытаются сделать, но которые не работают. Один из них — попытаться сохранить несколько ветвей, каждая со своей копией файла. Это не работает, потому что Git на самом деле не предоставляет способа не объединять определенные файлы между ветвями.

Другая вещь, которую люди пытаются сделать, это просто проигнорировать изменения в отслеживаемом файле, используя некоторый вызов git update-index . В разных случаях это прерывается, потому что это не поддерживается, и в разделе часто задаваемых вопросов по Git и на git update-index странице руководства объясняется, почему.

Ответ №2:

Вы можете использовать skip worktree опцию с git-update-index , когда вы не хотите, чтобы git управлял изменениями в этом файле.

 git update-index --skip-worktree db-connection.php
  

Ссылка: Пропустить бит рабочего дерева

Комментарии:

1. Вы пропустили раздел заметок внизу этой страницы, где конкретно указано, что не следует использовать его для этой цели.