2012-07-18 10 views
6

sagen, dass ich eine Datei in einem Git-Repo haben:Keeping lokale Veränderungen in einem Git-Repo

#file.py 

setting1 = default1 
setting2 = default2 

<some code> 

Jetzt will ich einige lokale Änderungen vornehmen, die zurück in den Repo nicht bekommen

#file.py - local change 

setting1 = mysetting1 
setting2 = mysetting2 

<some code> 
geschoben

Sagen Sie irgendwann in der Zukunft das upstream Repo aktualisiert wird, und ich möchte ihre Änderungen herunterziehen, ohne meine lokalen Einstellungen zu verwirren. IE ein git Befehl konnte ich laufen, dass die Datei aktualisieren würde, so dass es

#file.py - updated copy 

setting1 = mysetting1 
setting2 = mysetting2 

<new code> 

Gibt es eine Möglichkeit, dies zu tun, entweder mit Niederlassungen oder einem anderen git Feature wäre, wo ich auf die lokalen Einstellungen nicht setzen in einer separaten Datei?

Ich habe einige andere Fragen wie diese gesehen, aber sie konzentrieren sich auf das Ausschließen einer ganzen Datei.

Dank

Antwort

2

Werfen Sie einen Blick auf git stash. Es ist auch eine "ganze Datei" -Methode, aber Sie könnten feststellen, dass es flexibel genug ist.

Andernfalls git gui und eine Vielzahl von Umlenkungen (git rebase --interactive) oder Rosinenpicken (git cherry-pick) oder nur ein Seitenzweig sollte helfen.

+0

Danke. Tatsächlich verstaut ** ** das Zusammenführen von Dateien, so dass dies die gleiche Auswirkung auf die Datei hat. Ich finde eine lokale Niederlassung und Rebasing, um die zuverlässigste zu sein, da es scheint, als wäre es leicht, einen Vorrat und damit alle meine Änderungen zu verlieren. – korylprince

+0

Oh, ich wollte nie andeuten, dass es nicht verschmelzt. Ich wollte nur sagen, dass Sie einen Teil der Änderungen nicht speichern (den Rest verwerfen) können Sie mit einem Befehl in der Datei speichern. – fork0

+0

Das einzige Problem mit all diesen Methoden ist, wenn Git Merge immer einen Konflikt hat, wenn eine Zeile direkt unter einer bearbeiteten Zeile hinzugefügt wird. Wenn ich zum Beispiel Code wie oben habe und ich im Ursprungszweig "setting3 = default" unter setting2 hinzufügen würde, würde die Rebase (oder jede andere Methode) mit einem Konflikt fehlschlagen, aber wenn ich eine Linie zwischen den beiden hinzufüge, es tut die Rebase oder was auch immer gut. Irgendeine Idee warum? – korylprince

3

Was Sie tun, ändert wahrscheinlich Verbindungszeichenfolgen und so. Es ist etwas, das lokal für Ihre Umgebung ist. Der richtige Weg, um dies zu handhaben, ist durch Smudge/Clean-Skripte. Werfen Sie einen Blick auf die "Git Attributes" chapter in the Pro Git book (frei verfügbar).

+0

Ob sich herausstellt, was er braucht oder nicht, danke für die Verbindung, ziemlich clever. – R0MANARMY

+0

Danke für die Antwort. Ich glaube nicht, dass ich etwas so mächtiges brauche, aber es könnte später nützlich werden. – korylprince

Verwandte Themen