2010-09-30 2 views
17

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

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

modified: settings.py 

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

git rm --cached settings.py 

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

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

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

ответ

8

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

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

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

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

Не могли бы вы предпочли сохранить settings.py удален навсегда (как локально, так и на пульте дистанционного управления), а также:

  • версия с setting_remote файл на удаленной стороне
  • версия setting_local файл для локальной стороны (т.е. с локальными конкретными настройками)
  • Добавить filter driver Возможно перестраивать право settings.py файл при оформлении заказа.

alt text

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