У меня есть несколько файлов на сайте 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
. Все мои изменения затем перезаписываются.
Ответы:
У git есть другое решение для этого. Сначала измените файл, который вы не хотите отслеживать, и используйте следующую команду:
и если вы хотите снова отслеживать изменения, используйте эту команду:
git-update-index документация
источник
--skip-worktree
вариант лучше подходит для этой работы, чем--assume-unchanged
.Чтобы извлечь ответ из комментариев другого ответа:
$ git update-index --skip-worktree FILENAME
Кажется лучшим вариантом, чем
--assume-unchanged
Подробнее об этом можно прочитать здесь: Git - Разница между «предположим, без изменений» и «skip-worktree»
источник
Для моих проектов Code Igniter я храню database.php.example и config.php.example в репозитории.
Затем я добавляю config.php и apps / config / database.php в файл .gitignore .
Итак, наконец, при развертывании я могу скопировать файлы .example (в config.php и database.php), настроить их, и они не будут отслеживаться GIT.
источник
Я бы поместил их в ваш
.gitignore
файл и просто скопировал их вручную, если это необходимо.Таким образом, имя файла скелета будет в git, имена игнорируемых файлов не будут в git (но будут в .gitignore). Таким образом, когда выполняется ручной шаг, чтобы скопировать их в «фактический» из «шаблона» (возможно, лучшего имени, чем скелет), они немедленно игнорируются.
источник
git rm <file>
. Цель IE: файл config.php. Я хочу сохранить файл конфигурации, но я, очевидно, не хочу отслеживать учетные данные базы данных от клиента к клиенту, поскольку они различны.git add file1
а затем отредактировать.gitignore
файл. Переданный файл останется там и не будет обновлен. Или: Вы можете добавить файл,.gitignore
а затем добавить его,git add --force file1
чтобы принудительно вставить файл. Вы можете использовать 2-й вариант, когда вам нужно перезаписать файлПолученные ответы лишь частично решают проблему, но создают еще больше проблем.
Мне нужно было сохранить файл "Web.Local.config". Единственное решение, которое сработало для меня, было:
1. Исключить файл из проекта
2. Создайте отдельную копию файла как Web.LocalTemplate.config
Теперь, когда Git отслеживает «Web.LocalTemplate.config», все разработчики могут использовать его в качестве отправной точки. Тем не менее, «Web.Local.config», не являющийся частью проекта, будет автоматически игнорироваться.
источник
git update-index --skip-worktree FILENAME
частично решить вашу проблему или даже добавить больше проблем? Это решает именно то, что вы пытаетесь сделать. Вы пробовали это?