2010-09-30 5 views
17

Ich habe ein nacktes Repository und zwei Arbeitskopien - eine auf meinem Rechner, die andere auf dem Server.
Es stellte sich heraus, dass ich eine bestimmte Datei .gitignore muss, die für jede Maschine spezifisch sein muss. Nennen wir es "settings.py". Diese Datei ist bereits festgeschrieben.Wie kann ich eine bereits festgeschriebene Datei löschen und löschen, ohne andere Arbeitskopien zu beeinflussen?

Ich habe '' in .gitignore gesetzt, um es zu ignorieren. Wenn ich jetzt die Datei auf meinem Rechner git Status ändern sagt mir noch

modified: settings.py 

Ich fand heraus, dass ich settings.py wie diese entfernen haben:

git rm --cached settings.py 

Dann git add . von git commit gefolgt.

Aber wenn ich jetzt das auf den bloßen Repo schiebe und es auf die Arbeitskopie auf dem Server ziehe, wird settings.py dort gelöscht - was schlecht ist, weil ich diese spezifische settings.py behalten muss.

Ich dachte, ich könnte einfach eine Kopie von machen und es wieder einfügen, sobald es gelöscht wird, aber ich habe das Gefühl, dass es eine bessere Möglichkeit geben muss, dies zu tun.

Antwort

8

Sie können git anweisen, Änderungen an verfolgten Dateien vollständig zu ignorieren, ohne sie entfernen zu müssen. Verwenden Sie diesen Befehl:

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

Dann, wenn Sie die Datei verfolgen möchten später:

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

Könnten Sie eher settings.py gelöscht halten permanent (sowohl lokal als auch auf der Fernbedienung), und:

  • Version eine setting_remote-Datei für die Remote-Seite
  • Version einer setting_local Datei für die lokale Seite (dh mit lokalen spezifischen Einstellungen)
  • fügen Sie eine filter driver in der Lage, die richtige Datei beim Auschecken wieder aufzubauen.

alt text

Auf diese Weise settings.py "private" (Nicht-versioniert) gehalten wird. Die spezifischen Werte für jede Umgebung werden jedoch versioniert und jeweils in einer eigenen Datei ohne ein Problem mit dem Zusammenführen festgelegt.