2012-04-19 2 views
10

Was ich tun möchte, ist bereits in that question beschrieben. Aber ich möchte dieses Problem auf praktische und allgemeinere Weise lösen. So ist der Anwendungsfall ist die folgende:Was ist ein praktischer Workflow, um lokale Änderungen in git beizubehalten?

  • ich mehrere lokale Änderungen in mehrere Dateien web.config, createDb.sql oder in irgendwelchen anderen
  • Ich möchte nicht, diese Dateien zu begehen, da Änderungen spezifisch zu meinem lokalen sind Maschine nur
  • diese Dateien müssen Version und darüber hinaus Änderungen ziemlich oft einige von ihnen (sQL-Skripte), insbesondere so wollen, gesteuert werden ich Updates für diese Dateien erhalten
  • ich wollen verpflichten alle andere Dateien
  • Ich möchte ohne Reibung, dass in der Lage sein zu tun, in einem Befehl (posh-git verwenden, so Powershell ist willkommen)

Die der verketteten zu Lösung git add -p zu verwenden, und das ist nicht Praktisch, es ist langweilig, Chunks manuell die ganze Zeit oder vielleicht gibt es einen bequemeren Weg, das zu tun?

Zum Beispiel eine der folgenden funktionieren könnte:

  • , wenn es eine Möglichkeit, Dateien zu filtern, die in meiner Arbeitskopie sind, bevor sie zu indizieren, so etwas wie git -add -A -EXCEPT web.config crateDb.sql hinzufügen. Dann kann ich einen Git-Alias ​​zuordnen und das war's.
  • wenn es eine Möglichkeit gibt, Stash zu entfernen. Ich meine, Änderungen, die in einem bestimmten Speicher enthalten sind, aus der Arbeitskopie zu entfernen. Also muss ich etwas wie git stash -deapply vor jedem Commit machen, das ist auch in Ordnung.

Das Problem ist sehr häufig und es ist komisch, dass es derzeit keine Lösung gibt. Z.B. TortoiseSVN verfügt über die Funktion "Ignore-on-Commit". Perforce ermöglicht das Speichern dieser Art von lokalen Änderungen in einer separaten Änderungsliste und sendet sie nie ...

Irgendwelche Gedanken?

+0

Wie sonst können Sie diese Dateien "version control" außer den Änderungen übergeben? In Git wirkt sich das Commit auf _is_ local und _push_ auf andere Computer/Repos aus. Für mich riecht das nach einer besseren Lösung ist etwas wie [dies] (http://stackoverflow.com/questions/6009/how-do-you-deal-with-configuration-files-in-our-ource-control). –

+0

Ich habe eine bessere Lösung für Konfigurationsdateien - [NConifig] (https://github.com/Yegoroff/NConfig), aber das Problem ist, dass ich nicht nur Konfigurationsdateien habe. – Restuta

Antwort

10

Sie könnten die folgenden Informationen, bevor Ihr git commit versuchen zu tun:

git update-index --assume-unchanged web.config crateDb.sql 

Von git help:

--assume-unverändert

--no-assume- unverändert

Wenn diese Flags werden angegeben, die Objektnamen, die für die Pfade aufgezeichnet wurden, werden nicht aktualisiert. Stattdessen setzen diese Optionen und Unset das "angenommen, unverändert" Bit für die Pfade. Wenn das Bit "assume unverändert" aktiviert ist, hört git auf, die Arbeitsbaumdateien nach möglichen Änderungen zu überprüfen, sodass Sie das Bit manuell deaktivieren müssen, um git mitzuteilen, wenn Sie die Arbeitsbaumdatei ändern.Dies ist manchmal hilfreich bei der Arbeit mit einem großen Projekt auf einem Dateisystem, das sehr langsam lstat (2) Systemaufruf (z. B. cifs) hat.

Diese Option kann auch als ein grobe Dateiebene Mechanismus ignoriert unbestätigte Änderungen in getrackten Dateien (ähnlich zu dem, was .gitignore tut für untracked-Dateien) verwendet werden. Git wird (würdevoll) fehlschlagen, falls benötigt wird, um diese Datei im Index zu modifizieren, z. beim Zusammenführen eines Commits; Daher wird für den Fall, dass die angenommene-nicht-verfolgte Datei stromaufwärts geändert wird, benötigt, um die Situation manuell zu behandeln.

+0

Wie verhält sich git danach? Wird es diese Dateien noch verfolgen? Wenn ich ein Update bekomme, wird das passieren? – Restuta

+0

+1 Dies löst das Problem. – ralphtheninja

+1

@Restuta Die Dateien werden weiterhin von git verfolgt, aber git wird sie vorübergehend als nicht geändert betrachten, auch wenn sie sich geändert haben. Der git-Status usw. meldet die geänderten Dateien nicht. Verwenden Sie --no-assume-unverändert, um den Befehl rückgängig zu machen, und lassen Sie git Änderungen erneut beachten. – ralphtheninja

Verwandte Themen