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

У меня есть пустой репозиторий и две рабочие копии - одна на моем компьютере, другая на сервере.
Оказалось, что мне нужно .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 и положить ее обратно, как только она будет удалена, но я чувствую, что должен быть лучший способ сделать это.

Ответы [ 2 ]

9 голосов
/ 20 октября 2010

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

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

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

git update-index --no-assume-unchanged [FILENAME]
7 голосов
/ 30 сентября 2010

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

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

alt text

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

...