Ich mache meine Füße mit Git nass und habe folgendes Problem:
Mein Projektquellbaum:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
Ich habe Code (derzeit MEF) in meinem Lieferantenzweig, den ich dort kompilieren und dann die Referenzen verschieben werde, in /src/refs
die das Projekt sie abholt.
Mein Problem ist, dass ich mein .gitignore
Set ignorieren muss *.dll
und *.pdb
. Ich kann git add -f bar.dll
das Hinzufügen der ignorierten Datei erzwingen, was in Ordnung ist. Das Problem ist, dass ich nicht herausfinden kann, welche Dateien vorhanden sind, die ignoriert werden.
Ich möchte die ignorierten Dateien auflisten, um sicherzustellen, dass ich nicht vergesse, sie hinzuzufügen.
Ich habe die Manpage gelesen git ls-files
und kann sie nicht zum Laufen bringen. Es scheint mir, dass ich git ls-files --exclude-standard -i
tun sollte, was ich will. Was vermisse ich?
git clean
Tricks) zu tun, wie hier gezeigt . Außerdem empfehle ich das Beispiel "Ausschließen von" in Ihrer Zusammenfassung, da dabei keine .gitignore-Dateien berücksichtigt werden. Ich frage dies besonders, weil diese Seite die Top-Antwort von Google ist.git config --global alias.ls ls-files --exclude-standard
, und das macht die Antwort auf diese Fragegit ls -i
.Antworten:
Anmerkungen:
git status --ignored
.gitignore
git clean -ndX
arbeitet auf älteren gits, Anzeigen eine Vorschau von dem, was ignorierten Dateien entfernt werden können (ohne etwas zu entfernen)Ebenfalls interessant (in der Antwort von qwertymk erwähnt ), können Sie den Befehl auch verwenden , zumindest unter Unix ( funktioniert nicht in einer CMD- Windows- Sitzung).
git check-ignore -v
Die zweite zeigt die tatsächliche Regel an, nach der
.gitignore
eine Datei in Ihrem Git-Repo ignoriert wird.Verwenden Sie unter Unix " Was wird rekursiv auf alle Dateien im aktuellen Verzeichnis erweitert? " Und ein bash4 +:
(oder ein
find -exec
Befehl)Hinweis: https://stackoverflow.com/users/351947/Rafi B. schlägt in den Kommentaren vor , den (riskanten) Globstar zu vermeiden :
Stellen Sie jedoch sicher, dass Sie die Dateien aus dem
.git/
Unterordner ausschließen.Ursprüngliche Antwort 42009)
sollte funktionieren, außer der Quellcode zeigt an:
exc_given
?Es stellt sich heraus, dass nach dem ein weiterer Parameter benötigt wird,
-i
um tatsächlich etwas aufzulisten:Versuchen:
(aber das würde nur Ihr zwischengespeichertes (nicht ignoriertes) Objekt mit einem Filter auflisten, so dass das nicht ganz das ist, was Sie wollen)
Beispiel:
Tatsächlich finde ich in meiner 'gitignore'-Datei (genannt' exclude ') eine Befehlszeile, die Ihnen helfen könnte:
Damit....
sollte den Trick machen.
Wie in der Manpage ls-files erwähnt ,
--others
ist dies der wichtige Teil, um Ihnen nicht zwischengespeicherte, nicht festgeschriebene, normalerweise ignorierte Dateien anzuzeigen.--exclude_standard
ist nicht nur eine Verknüpfung, sondern eine Möglichkeit, alle Standardeinstellungen für "ignorierte Muster" einzuschließen.quelle
git status --ignored
scheint es auch nicht verfolgte Dateien zu zeigen: github.com/git/git/blob/master/Documentation/RelNotes/…git check-ignore -v *
funktioniert super, da es zeigt, wo die Konfiguration angewendet wurde. Vielen Dank.shopt -s globstar
danach sollte es funktionieren.git check-ignore -v $(find . -type f -print)
Es gibt einen viel einfacheren Weg, dies zu tun (git 1.7.6+):
Siehe Gibt es eine Möglichkeit, den Git-Status anzuweisen, die Auswirkungen von Gitignore-Dateien zu ignorieren?
quelle
error: unknown option 'ignored'
. Selbst das Hinzufügen,-s
wie im verlinkten Beitrag vorgeschlagen, hat nicht funktioniert.-s
. Sie können versuchengit status -h
zu sehen, ob--ignored
unterstützt wirdgit clean -ndX
Lösung, da die seltene Situation, in der man versehentlich die Flags vergisst, eine unwiderrufliche Auswirkung auf das Repository hat, da nicht verfolgte Dateien gelöscht werden. Es ist also gefährlich. Im Gegenteil, esgit status --ignored
ist immer sicher, auch wenn es falsch eingegeben wurde, und es ist natürlich, sich daran zu erinnern.Eine andere Option, die ziemlich sauber ist (kein Wortspiel beabsichtigt):
Erläuterung:
Hinweis: Diese Lösung zeigt keine ignorierten Dateien an, die bereits entfernt wurden.
quelle
make clean
einem Build-Server und auf diesem sehr hilfreich.git ls-files -o -i --exclude-standard
.git clean -dXn
war schon immer das, was ich wollte, zeigt aber keine ignorierten Dateien an, die bereits entfernt wurden.git ls-files -o -i --exclude-standard
könnte das tun. Das könnte also den Unterschied verursachen.n
erste, weniger zufällige Eingabe auf diese Weise einzugeben.git clean -ndX
n
weglassen, wird Git standardmäßig verwendetfatal: clean.requireForce defaults to true and neither -n nor -f given; refusing to clean
. Immer noch ziemlich sicher, aber dasn
erste zu tippen ist noch sicherer! :)Obwohl im Allgemeinen korrekt, funktioniert Ihre Lösung nicht unter allen Umständen. Nehmen Sie ein Repo-Verzeichnis wie dieses an:
und ein .gitignore wie dieser:
Dies ignoriert das
doc
Verzeichnis und alle Dateien untentmp
. Git funktioniert wie erwartet, der angegebene Befehl zum Auflisten der ignorierten Dateien jedoch nicht. Schauen wir uns an, was git zu sagen hat:Beachten Sie, dass
doc
in der Liste fehlt. Sie können es bekommen mit:Beachten Sie die zusätzlichen
--directory
Option.Meines Wissens gibt es keinen einzigen Befehl, um alle ignorierten Dateien gleichzeitig aufzulisten. Aber ich weiß nicht, warum
tmp/dir0
überhaupt nicht auftaucht.quelle
(git ls-files -oi --exclude-standard; git ls-files -oi --exclude-standard --directory) | perl -nle '$seen{$_}++||next;if(-d){system"find",$_,"-type","f"}else{print}'
Git hat jetzt diese Funktionalität eingebaut
Natürlich können Sie den Globus in etwas wie
**/*.dll
in Ihrem Fall ändernGit Referenz
quelle
git check-ignore **/*
Dateien in Unterverzeichnisse aufnehmenEs sollte ausreichend sein, um zu verwenden
da das alles abdeckt von
daher ist letzteres überflüssig.
Sie können dies vereinfachen, indem Sie Ihrer
~/.gitconfig
Datei einen Alias hinzufügen :Jetzt können Sie einfach eingeben
git ignored
, um die Liste anzuzeigen. Viel einfacher zu merken und schneller zu tippen.Wenn Sie die prägnantere Darstellung der Lösung von Jason Geng bevorzugen, können Sie dafür einen Alias hinzufügen:
Die ausführlichere Ausgabe ist jedoch nützlicher für die Behebung von Problemen mit Ihren .gitignore-Dateien, da sie jede einzelne Baumwoll-Pickin-Datei auflistet, die ignoriert wird. Normalerweise leiten Sie die Ergebnisse durch,
grep
um festzustellen, ob sich dort eine Datei befindet, von der Sie erwarten, dass sie ignoriert wird, oder ob sich dort eine Datei befindet, die Sie nicht ignorieren möchten.Wenn Sie dann nur eine kurze Anzeige sehen möchten, ist es einfach genug, sich zu merken und zu tippen
(Das
-s
kann normalerweise weggelassen werden.)quelle
git status --ignored
funktioniert auf Debian Sid, ist aber vielleicht sehr neu… aber anscheinend wurde es aufgrund der großen Nachfrage hinzugefügtSo drucken Sie die vollständige Liste der Dateien im Arbeitsbaum, die mit Mustern übereinstimmen, die sich an einer beliebigen Stelle in den mehreren Gitignore-Quellen von Git befinden (wenn Sie GNU verwenden
find
):Es werden alle Dateien im aktuellen Zweig des Repositorys überprüft (es sei denn, Sie haben sie lokal gelöscht).
Und es identifiziert auch die bestimmten Gitignore-Quelllinien.
Git verfolgt weiterhin Änderungen in einigen Dateien, die mit Gitignore-Mustern übereinstimmen, einfach weil diese Dateien bereits hinzugefügt wurden. Nützlicherweise zeigt der obige Befehl auch diese Dateien an.
Negative Gitignore-Muster werden ebenfalls abgeglichen. Diese sind jedoch in der Auflistung leicht zu unterscheiden, da sie mit beginnen
!
.Wenn Sie Windows verwenden, enthält Git Bash GNU
find
(wie von gezeigtfind --version
).Wenn die Liste lang ist (und Sie haben
rev
), können Sie sie auch (etwas) als Erweiterung anzeigen:Weitere Einzelheiten finden Sie
man find
,man git-check-ignore
,man rev
, undman sort
.Der Sinn dieses ganzen Ansatzes ist, dass sich Git (die Software) schnell ändert und sehr komplex ist. Im Gegensatz dazu GNU
find
ist extrem stabil (zumindest in den Funktionen hier verwendet wird ). Jeder, der wettbewerbsfähig sein möchte, indem er sein tiefes Wissen über Git zeigt, wird die Frage auf eine andere Weise beantworten.Was ist die beste Antwort? Diese Antwort minimiert bewusst die Abhängigkeit von Git-Wissen, um das Ziel der Stabilität und Einfachheit durch Modularität (Informationsisolation) zu erreichen, und ist auf eine lange Lebensdauer ausgelegt.
quelle
(Erweiterung der anderen Antworten)
Beachten Sie, dass
git check-ignore
der festgeschriebene.gitignore
und nicht der in Ihrem Arbeitsbaum verwendet wird! Um damit zu spielen, ohne Ihren Git-Verlauf zu verschmutzen, können Sie frei versuchen, ihn zu bearbeiten, und dann mit a festschreibengit commit --amend
.Dieses Problem tritt hauptsächlich auf, wenn Sie eine Problemumgehung für das Problem benötigen, dass git keinen Verzeichnissen folgt. Geben Sie Folgendes ein
.gitignore
:.keep
sollte eine Datei mit der Länge Null seindirtokeep
.Das Ergebnis ist, dass alles in
dirtokeep
ignoriert wird, außerdirtokeep/.keep
dass auch dasdirtokeep
Verzeichnis beim Klonen / Auschecken erstellt wird.quelle
Angenommen, es gibt einige Ignorierverzeichnisse. Warum nicht "git status node / logs /" verwenden, um zu erfahren, welche Dateien hinzugefügt werden sollen? Im Verzeichnis habe ich eine Textdatei, die nicht Teil der Statusausgabe ist, z.
Am Filialstamm
Ihre Filiale ist mit 'Ursprung / Master' auf dem neuesten Stand.
Nicht verfolgte Dateien:
(Verwenden Sie "git add ...", um in das festzuschreiben, was festgeschrieben wird.)
.gitignore ist:
*
! .gitignore
quelle