Храните файл в репозитории Git, но не отслеживайте изменения - PullRequest
248 голосов
/ 21 марта 2012

У меня есть несколько файлов на сайте 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 git@github.com:user123/myRepo.git httpdocs

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

Ответы [ 5 ]

541 голосов
/ 01 июля 2013

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

git update-index --assume-unchanged FILE_NAME

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

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

документация git-update-index

55 голосов
/ 25 марта 2012

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

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

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

47 голосов
/ 08 мая 2018

Чтобы извлечь ответ из комментариев другого ответа:

$ git update-index --skip-worktree FILENAME

Лучше, чем --assume-unchanged

.

Подробнее об этом можно прочитать здесь: Git - Разница между «предположим, без изменений» и «пропустить рабочее дерево»

2 голосов
/ 21 марта 2012

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

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

0 голосов
/ 01 мая 2019

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...