Gibt es eine Möglichkeit zu erkennen, warum eine Datei von git ignoriert wird (dh welche Regel in einer .gitignore
Datei bewirkt, dass die Datei ignoriert wird)?
Stellen Sie sich vor, ich habe dieses (oder ein viel komplexeres Szenario mit Hunderten von Ordnern und Dutzenden von .gitignore
Dateien:
/
-.gitignore
-folder/
-.gitignore
-subfolder/
-.gitignore
-file.txt
Wenn ich git add folder/subfolder/file.txt
git starte, kann ich mich darüber beschweren, dass es ignoriert wird:
The following paths are ignored by one of your .gitignore files:
folder/subfolder/file.txt
Use -f if you really want to add them.
Gibt es eine Möglichkeit zu wissen, welche der möglichen .gitignore
eine Regel haben, um diese Datei zu ignorieren und auch die Regel anzuzeigen? Mögen:
The following paths are ignored by your folder/.gitignore file (line 12: *.txt)
folder/subfolder/file.txt
Use -f if you really want to add them.
Oder nur:
$ git why-is-ignored folder/subfolder/file.txt
folder/.gitignore:12:*.txt
git check-ignore
wird bald (git1.8.5 / 1.9) eine--no-index
Option haben. Siehe meine Antwort untenGIT_TRACE_EXCLUDE=1 git status
wird in Kürze eine zusätzliche Möglichkeit zum Debuggen von.gitignore
Regeln sein. Siehe meine bearbeitete Antwort untenAntworten:
Weitere Informationen finden Sie in der Manpage .
Die ursprüngliche Antwort folgt:
git bietet derzeit so etwas nicht an. Nachdem ich Ihre Frage gesehen hatte, googelte ich und stellte fest, dass diese Funktion bereits 2009 angefordert und teilweise implementiert wurde . Nachdem ich den Thread gelesen hatte, wurde mir klar, dass es nicht zu viel Arbeit sein würde, ihn richtig zu machen. Deshalb habe ich mit der Arbeit an einem Patch begonnen und hoffe, dass er in den nächsten ein oder zwei Tagen fertig sein wird. Ich werde diese Antwort aktualisieren, wenn sie fertig ist.
UPDATE: Wow, das war viel schwieriger als ich erwartet hatte. Die Innereien von
git
's Ausschlussbehandlung sind ziemlich kryptisch. Wie auch immer, hier ist eine fast abgeschlossene Reihe von Commits, die für die heutige vorgelagertemaster
Niederlassung gelten. Die Testsuite ist zu 99% vollständig, aber ich habe die Bearbeitung der--stdin
Option noch nicht abgeschlossen. Hoffentlich schaffe ich das dieses Wochenende und sende meine Patches dann an die Git-Mailingliste.In der Zwischenzeit würde ich es auf jeden Fall begrüßen, von jedem zu testen, der dazu in der Lage ist - klonen Sie einfach von meiner
git
Gabel , überprüfen Sie dencheck-ignore
Zweig und kompilieren Sie ihn wie gewohnt.UPDATE 2: Fertig! Die neueste Version ist wie oben beschrieben auf Github und ich habe die Patch-Serie zur Peer-Review an die Git-Mailingliste gesendet . Mal sehen, was sie denken ...
UPDATE 3: Nach einigen weiteren Monaten des Hackens / Patch-Reviews / Diskutierens / Wartens freue ich mich, sagen zu können, dass diese Funktion jetzt den
master
Zweig von git erreicht hat und in der nächsten Version (1.8.2, voraussichtlich 8.) verfügbar sein wird März 2013). Hier ist diecheck-ignore
Handbuchseite . Puh, das war viel mehr Arbeit als ich erwartet hatte!UPDATE 4: Wenn Sie an der vollständigen Geschichte über die Entwicklung dieser Antwort und die Implementierung der Funktion interessiert sind, lesen Sie Episode 32 des GitMinutes-Podcasts .
quelle
git check-ignore
mache nichts.git check-ignore
vorhanden und arbeitet in 1.8.2. Wenn das Verhalten nicht Ihren Erwartungen entspricht, empfehle ich Ihnen, die Handbuchseite (erneut) zu lesen. Wenn dies immer noch nicht der Fall ist, senden Sie bitte einen ordnungsgemäßen Fehlerbericht auf der Git-Mailingliste. Nur zu sagen, dass es nichts tut, ist nicht sehr hilfreich. Ich gehe davon aus, dass Sie es wahrscheinlich in einer nicht ignorierten Datei ausgeführt haben und fälschlicherweise eine Ausgabe erwarten (obwohl ich--show-unmatched
den--verbose
Ausgabemodus wahrscheinlich in Zukunft unterstützen werde).Update Git 2.8 (März 2016):
Siehe " Eine Möglichkeit zum Überprüfen der
.gitignore
Datei "Dies ist komplementär zu dem
git check-ignore -v
unten beschriebenen.Ursprüngliche Antwort: September 2013 (Git 1.8.2, dann 1.8.5+):
git check-ignore
verbessert sich wieder in git 1.8.5 / 1.9 (Q4 2013) :Siehe Commit 8231fa6 von https://github.com/flashydave :
quelle
Ich kann auf der Manpage nichts finden, aber hier ist ein schnelles und schmutziges Skript, das Ihre Datei in jedem übergeordneten Verzeichnis überprüft, um festzustellen, ob sie hinzugefügt werden kann. Führen Sie es in dem Verzeichnis aus, das die Problemdatei enthält:
Dabei
STOP_DIR
befindet sich das Verzeichnis der obersten Ebene des Git-Projekts undFILENAME
der Name der Problemdatei (ohne Pfad). Es erstellt eine leere Datei mit demselben Namen auf jeder Hierarchieebene (falls nicht vorhanden) und versuchtgit add -n
zu prüfen, ob sie hinzugefügt werden kann (sie bereinigt nach sich selbst). Es gibt so etwas aus wie:Das Skript:
quelle
Um die Hauptantwort der Verwendung hinzuzufügen
git check-ignore -v filename
(danke übrigens), stellte ich fest, dass meine .gitignore-Datei alles blockierte, weil nach einem Platzhalter eine neue Zeile stand, also hatte ich:* .sublime-project
als Beispiel. Ich habe gerade die Newline entfernt und voila! Es wurde behoben.
quelle