Ich verwende git, um mit phonegap zu synchronisieren, während ich im nativen Browser des Telefons teste. Als solches habe ich die folgende Zeile:
var isPhoneGap = false;
Natürlich ändere ich dies beim Erstellen, aber gibt es eine Möglichkeit, git so einzurichten, dass diese eine Zeile ignoriert wird, oder muss ich sie in eine eigene Datei einfügen und auf diese Weise ignorieren?
Ich verwende Gitx und das Terminal unter OSX 10.6.
Antworten:
Wenn Ihre Datei von einem bestimmten Typ ist, können Sie einen Inhaltsfiltertreiber deklarieren , den Sie in einer
.gitattributes
Datei deklarieren können (wie in der "Keyword-Erweiterung" von " Git-Attribute " dargestellt):(Sie können diesen Filter sogar für eine bestimmte Datei festlegen , wenn Sie möchten)
Implementieren:
yourFilterName.smudge
(ausgelöst amgit checkout
) undyourFilterName.clean
(ausgelöst amgit add
)Ihre Datei würde unverändert angezeigt
git status
, die ausgecheckte Version hätte jedoch den richtigen Wert fürisPhoneGap
.quelle
git diff or
Git-Status erstellt? Ignorieren Sie die Filter? So kann ich immer noch sehen, was anders ist? Mein Anwendungsfall ist für Debug-Protokolle ... die ich schließlich löschen möchte ... @jthill @VonCsh ".git/helper.sh"
, um sicherzustellen, dass alle Parameter durchlaufen werden, mit denen sed ausgeführt werden soll"$@"
(ich gehe davon aus, dass nur der Dateipfad übergeben wird).Sie können verwenden
um die Änderungen einer Datei zu ignorieren, die Sie nicht verfolgen möchten. Ich verwende diese Lösung, wenn ich eine Datei im Repository haben muss, aber diese Datei enthält einige Teile, die sich ändern und die ich nicht immer verfolgen muss.
Wenn die Datei wichtige Änderungen enthält, müssen Sie Folgendes tun:
Siehe auch den Git doc update-index für
--[no-]assume-unchanged
Parameter.quelle
--skip-worktree
für die meisten Zwecke eine bessere Option ist. stackoverflow.com/a/39583010/4233593git commit -a
ist frei , dass der Wandel zu begehen). "Mit Gitx sollten Sie einzelne Zeilen festschreiben oder ignorieren können (das wissen Sie vielleicht schon), aber Sie müssten dies jedes Mal tun, wenn Sie festschreiben. Ich denke, es wäre besser, eine Konfigurationsdatei pro Bereitstellungsziel (Sie können diese versionieren) und einige Laufzeitparameter zu haben, unabhängig davon, wie Sie den Server starten (wie
./myserver --config=whatever.js
).quelle
Fortsetzung https://stackoverflow.com/a/20574486/4935114 , @ Mike vorgeschlagen , eine schaffen
pre-commit
Haken, wirdgrep
die inszenierte Dateien für die Leitungen in die man ignorieren könnte wollen. Der Hook prüft, ob diese Zeilen inszeniert wurden. Wenn ja, ist es eineecho
Warnung und es istexit
mit Code,1
so dass der Festschreibungsprozess nicht fortgesetzt wird.Inspiriert von @ Mikes Antwort fand ich mich darin wieder, eine verbesserte Version seines Hakens zu verwenden, die automatisch
reset
(mit der-p
Flagge) der spezifischen Zeile entspricht, die wir ignorieren möchten.Ich bin nicht sicher, ob dieser Hook in einer Situation funktioniert, in der viele Dateien mit dieser Zeile ignoriert werden müssen, aber dieser
pre-commit
Hook sucht nach einer Änderung in dieser Zeile in einer bestimmten DateibuildVars.java
. Das Hook-Skript sah so aus, als ich es auf meinem Computer testete.Erläuterung
Ich habe eine Kontrollsequenz wiederholt, die
isPhoneGap
während eines interaktivenreset
Prozesses nach dem regulären Ausdruck sucht . Wenn Sie also einen Benutzer emulieren, der drückt, um/
zu suchenisPhoneGap
, drückty
er, wenn er gefragt wird, ob er diesen Patch verwerfen möchte, und drückt schließlichq
, um das Interaktive zu beendenreset
.Der interaktive umgekehrte Patch-Prozess ist hier dokumentiert: https://git-scm.com/docs/git-add#git-add-patch
HINWEIS: Das obige Skript setzt voraus, dass die Variable
interactive.singleKey
istfalse
. Wenn Sie Ihre konfiguriert habentrue
, entfernen Sie alle direkt nach der Warnung$'\n'
aus demecho
Befehl.quelle
So können Sie es mit Git-Filtern machen :
ODER
*.rb filter=gitignore
, dh Filter ausführen, dergitignore
für alle*.rb
Dateien benannt istgitignore
Filter in Ihremgitconfig
:$ git config --global filter.gitignore.clean "sed '/#gitignore$/'d"
dh diese Zeilen löschen$ git config --global filter.gitignore.smudge cat
, dh nichts tun, wenn Sie eine Datei aus dem Repo ziehenAnmerkungen:
Dies gilt natürlich für Ruby-Dateien, die angewendet werden, wenn eine Zeile mit endet
#gitignore
und global in angewendet werden~/.gitconfig
. Ändern Sie dies, wie Sie es für Ihre Zwecke benötigen.Warnung!!
Dadurch unterscheidet sich Ihre Arbeitsdatei (natürlich) vom Repo. Jedes Auschecken oder Umbasieren bedeutet, dass diese Zeilen verloren gehen! Dieser Trick mag nutzlos erscheinen, da diese Zeilen beim Auschecken, erneuten Basieren oder Ziehen wiederholt verloren gehen, aber ich habe einen bestimmten Anwendungsfall, um ihn zu nutzen.
Nur
git stash save "proj1-debug"
während der Filter inaktiv ist (nur vorübergehend deaktivierengitconfig
oder so). Auf diese Weise kann mein Debug-Code jederzeitgit stash apply
in meinen Code übernommen werden, ohne befürchten zu müssen, dass diese Zeilen jemals versehentlich festgeschrieben werden.Ich habe eine mögliche Idee, um mit diesen Problemen umzugehen, aber ich werde versuchen, sie ein anderes Mal zu implementieren.
Vielen Dank an Rudi und jw013 für die Erwähnung von Git-Filtern und Gitattributen.
quelle
Ein Inhaltsfiltertreiber ist keine gute Lösung. Möglicherweise können Sie diese Zeile vor
git status
/ etc ausblenden , sie wird jedoch nicht wirklich ignoriert. Sobald Sie den Wert ändern, wird Ihr Arbeitsverzeichnis als verschmutzt markiert, obwohl die Änderung möglicherweise nicht sichtbar ist.Wenn Sie wirklich möchten, dass diese Zeile nicht mehr in der Versionskontrolle enthalten ist, ist es möglicherweise das einzig praktikable Mittel, sie in ein Befehlszeilenargument zu ändern oder sie in einer ignorierten Include- oder Build-Datei zu platzieren.
quelle
Ich vermute, dies könnte etwas sein, das in mehr als einer Zeile Ihrer Quelle auftaucht.
Ich denke, es wäre am saubersten, eine .userbuildconfig-Datei zu haben, die Sie gerade einschließen und die Standardeinstellungen einchecken lassen. Dann können Sie Carlos 'Vorschlag verwenden , um diese Datei allein als unverändert zu markieren. Auf diese Weise werden andere Änderungen an der Datei, in der Sie die Einstellung überprüfen müssen, nicht übersehen.
Auf diese Weise können Sie Präprozessor-Makros lokal optimieren (oder für Java etwa https://stackoverflow.com/a/1813873/1270965 ).
quelle
Nee. Sie können nur einzelne Dateien (und mehr) ignorieren, da die Zeilen in .gitignore mit Dateinamen und nicht mit Dateiinhalten übereinstimmen. Sie haben die Lösung hierfür bereits erwähnt, dh ignorieren Sie eine einzelne Datei, die den Inhalt enthält, den Sie ignorieren möchten.
quelle