Подтвердить что ты не робот

Как сделать .gitignore и удалить уже зафиксированный файл, не затрагивая другие рабочие копии?

У меня есть голый репозиторий и две рабочие копии - одна на моей машине, другая на сервере.
Оказалось, что я должен .gitignore указать определенный файл, который должен быть конкретным для каждой машины. Позвольте называть его 'settings.py'. Этот файл уже зафиксирован.

Я положил 'settings.py' в .gitignore, чтобы игнорировать его. Когда я теперь изменяю файл на моей машине, статус git все еще говорит мне

modified:  settings.py

Я понял, что мне нужно удалить settings.py, как это:

git rm --cached settings.py

Затем git add ., а затем git commit.

Но когда я сейчас подталкиваю это к голой репо и вытаскиваю ее на рабочую копию на сервере, там удаляется settings.py - что плохо, потому что я должен сохранить этот конкретный settings.py.

Я понял, что могу просто сделать копию settings.py и вернуть ее обратно, как только она будет удалена, но я чувствую, что должен быть лучший способ сделать это.

4b9b3361

Ответ 1

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

git update-index --assume-unchanged [FILENAME]

Затем, если вы хотите отслеживать файл позже:

git update-index --no-assume-unchanged [FILENAME]

Ответ 2

Не могли бы вы сохранить файл settings.py удаленно (как локально, так и удаленно) и:

  • версия a setting_remote файл для удаленной стороны
  • версия a setting_local файл для локальной стороны (то есть с локальными конкретными настройками)
  • добавьте драйвер , чтобы восстановить правильный файл settings.py при оформлении заказа.

alt text

Таким образом, settings.py хранится "private" (не поддерживается версией). Но конкретные значения для каждой среды версируются, каждый из которых установлен в собственном файле, без каких-либо проблем с объединением.