Храните файл в репозитории Git, но не отслеживайте изменения.

У меня есть несколько файлов на сайте CodeIgniter, которые я хочу иметь в репо, но не отслеживать никаких изменений.

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

// the production config files i want the files but they need to be updated to specific client needs
application/config/production/config.php
application/config/production/database.php
application/config/production/tank_auth.php
// index page, defines the environment (production|development)
/index.php
// all of the css/js cache (keep the folder but not the contents)
/assets/cache/*
// production user based styling (color, fonts etc) needs to be updated specific to client needs
/assets/frontend/css/user/frontend-user.css

В настоящее время, если я запустил

git clone [email protected]:user123/myRepo.git httpdocs

а затем отредактируйте файлы выше, все отлично. Пока я не выпущу исправление или патч и не запустил git pull. Все мои изменения затем перезаписываются.

Ответ 1

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

git update-index --assume-unchanged FILE_NAME

и если вы хотите снова отслеживать изменения, используйте эту команду:

git update-index --no-assume-unchanged FILE_NAME

git -update-index documentation

Ответ 2

Для моих проектов Code Igniter я сохраняю database.php.example и config.php.example в репо.

Затем я добавляю config.php и apps/config/database.php в файл .gitignore.

Итак, наконец, когда я развертываю, я могу скопировать файлы .example(в config.php и database.php), настроить их, и они не будут отслеживаться с помощью GIT.

Ответ 4

Я бы поместил их в ваш файл .gitignore и просто скопировал их вручную по мере необходимости.

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

Ответ 5

Полученные ответы лишь частично решают проблему, но создают еще больше проблем.

Мне нужно было сохранить файл "Web.Local.config". Единственное решение, которое сработало для меня, было:

1. Исключить файл из проекта

2. Создайте отдельную копию файла как Web.LocalTemplate.config

Теперь, когда Git отслеживает "Web.LocalTemplate.config", все разработчики могут использовать его в качестве отправной точки. Однако файл "Web.Local.config", не являющийся частью проекта, будет автоматически игнорироваться.