Überrascht von so vielen falschen Antworten. -u noist falsch. -unoist richtig. -u noversucht, einen Status für eine Datei namens no! Das noist kein Argument dafür -u. Um nodie Interpretation als Argument zu erzwingen -u, darf kein Leerzeichen vorhanden sein. Um dies zu testen, tun Sie touch Invalidund vergleichen Sie git status -uInvalidmit git status -u Invalid.
Aaron McDaid
Antworten:
251
Wie bereits gesagt, um vom Status auszuschließen, verwenden Sie einfach:
git status -uno # must be "-uno" , not "-u no"
Wenn Sie stattdessen aktuell nicht verfolgte Dateien dauerhaft ignorieren möchten, können Sie im Stammverzeichnis Ihres Projekts Folgendes starten:
Bei jedem nachfolgenden Aufruf von git statuswerden diese Dateien explizit ignoriert.
UPDATE : Der obige Befehl hat einen kleinen Nachteil: Wenn Sie noch keine .gitignoreDatei haben, ignoriert sich Ihr Gitignore selbst! Dies geschieht, weil die Datei .gitignoreerstellt wird, bevor die git status --porcelainausgeführt wird. Wenn Sie noch keine .gitignoreDatei haben, empfehle ich Folgendes:
Dadurch wird eine Unterschale erstellt, die vor dem Erstellen der .gitignoreDatei abgeschlossen wird.
BEFEHLSERKLÄRUNG, da ich viele Stimmen bekomme (danke!) Ich denke, ich sollte den Befehl besser ein wenig erklären:
git status --porcelainwird anstelle von verwendet, git status --shortweil manuelle Zustände "Geben Sie die Ausgabe in einem einfach zu analysierenden Format für Skripte an. Dies ähnelt der kurzen Ausgabe, bleibt jedoch über Git-Versionen hinweg und unabhängig von der Benutzerkonfiguration stabil." Wir haben also sowohl die Analysefähigkeit als auch die Stabilität;
grep '^??'filtert nur die Zeilen ??, die mit beginnen , die laut Git-Status-Handbuch den nicht verfolgten Dateien entsprechen;
cut -c4- Entfernt die ersten 3 Zeichen jeder Zeile, wodurch nur der relative Pfad zur nicht verfolgten Datei angegeben wird.
Die |Symbole sind Pipes , die die Ausgabe des vorherigen Befehls an die Eingabe des folgenden Befehls übergeben.
Die Symbole >>und >sind Umleitungsoperatoren , die die Ausgabe des vorherigen Befehls an eine Datei anhängen oder eine neue Datei überschreiben / erstellen.
Eine weitere Variante für diejenigen, die es vorziehen ,sed anstelle von grepund zu verwenden cut, hier ist ein anderer Weg:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
cut -c4- Entfernt die ersten 4 Zeichen jeder Zeile, wodurch nur der relative Pfad zur nicht verfolgten Datei angegeben wird. Nr. -cMarkiert den Anfang einer Liste der zu schneidenden Spaltennummern. Und 4-wählt die Zeile von Spalte 4 bis zum Ende aus, wodurch die Spalten 1-3 abgeschnitten werden. Ihr Befehl zum Ausschneiden entfernt also tatsächlich die ersten 3 Zeichen jeder Zeile. Wenn Sie 4 Zeichen aus einer Git-Statuszeile wie der für diese Datei hier ?? app/views/static_pages/contact.html.erbentfernen würden, würden Sie den ersten Buchstaben von entfernen app. Der Befehl ist also korrekt, aber die Erklärung ist fehlerhaft.
7stud
@ 7stud: danke, du hast recht, ich habe versehentlich 4 geschrieben. Ich habe die Antwort korrigiert.
Diego
2
Ich schätze die Befehlserklärung sehr. Es ist schön zu wissen, was die zufälligen Befehle tun, die ich aus dem Internet kopiert habe, und hilft uns allen, den Umgang mit der Kommandozeile und Git besser zu lernen.
Eric Fitting
1
-u nofunktioniert bei mir nicht Aber -unotut es. Ich habe die Antwort entsprechend aktualisiert. Das ist seltsames Design für Git. Ich bin auf Git 1.7.1
Aaron McDaid
2
@ AaronMcDaid: Danke. Die Änderung wird hier dokumentiert und hier
Diego
51
Wenn Sie diese Dateien dauerhaft ignorieren möchten, können Sie sie auf einfache Weise hinzufügen .gitignore:
Warum bekommt das nicht so viele Stimmen? Keine Notwendigkeit, 2 andere Programme durchzuleiten!
JoelFan
4
@JoelFan: zwei Gründe: 1) Dieser funktioniert nur von der Wurzel des Git aus , während der akzeptierte von jedem Unterverzeichnis aus funktioniert. Sie müssen nur den Zielpfad anpassen. .gitignore2) Wenn Sie ein nicht verfolgtes Verzeichnis haben, listet dieses jeweils und auf Jede einzelne Datei darin, aber nicht das nicht verfolgte Verzeichnis selbst (damit Sie das Verzeichnis nicht ignorieren und zukünftige Dateien im Verzeichnis weiterhin als nicht verfolgt gemeldet werden, während die akzeptierte Datei nur das Verzeichnis und nicht die darin nicht verfolgten Dateien auflistet Dies ist eine Frage dessen, was Sie tun möchten, aber oft möchten Sie einfach das ganze Verzeichnis ignorieren
Diego
1
Danke poolie ich den Unterschied zu schätzen weiß von Ihrem Vorschlag wegen der von @Diego I genannten Punkten zu arbeiten begann mit einer Bibliothek von Dateien und Ordnern , und ich mag nicht auf die Originaldateien verfolgen / drücken. Ich möchte nur Dateien verfolgen, die ich in der Bibliothek hinzufüge oder neu erstelle. Das Hinzufügen der übergeordneten Ordner würde alles ignorieren. Diese / Ihre Lösung fügte alle 1696 Dateien im Handumdrehen hinzu. xD
Chaos7703
Dies kann auch mit erreicht werden git config status.showUntrackedFiles no.
Der Parameter mode wird verwendet, um die Behandlung von nicht verfolgten Dateien anzugeben. Es ist optional: Standardmäßig werden alle verwendet, und wenn angegeben, muss es an der Option festhalten (z. B. -uno, aber nicht -u nein).
Nun, wenn jeder vor dem Posten RTFM würde, würde keiner von uns jemals einen Repräsentanten bekommen :-)
Jenny D
4
Zwei Wege:
Verwenden Sie das Argument "-uno" für den Git-Status. Hier ist ein Beispiel:
[jenny@jenny_vmware:ft]$ git status
# On branch ft
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
[jenny@jenny_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)
Oder Sie können die Dateien und Verzeichnisse zu .gitignore hinzufügen. In diesem Fall werden sie nie angezeigt.
Eine praktische Möglichkeit, das .gitignoreWesen zu bearbeiten git status | cat >> temp && vim temp. Bearbeiten Sie dann die Datei so, dass die ersten und letzten Zeilen sowie die nachfolgenden #und die Leerzeichen danach gelöscht werden . Dann cat temp >> .gitignore && rm temp. Falls noch keine .gitignorevorhanden war, reicht mv temp .gitignoredies aus. Hässliches Zeug, aber besser als das .gitignoremanuelle Aktualisieren .
Sjas
1
Diese Antwort ist falsch. Die richtige Antwort lautet -uno. Wenn Sie verwenden -u no, entspricht dies no -u- es wird ein Status für eine aufgerufene Datei no(die wahrscheinlich nicht vorhanden ist) ausgeführt und der Standardmodus verwendet -u. dh es ist gleichbedeutend mitgit status no
Aaron McDaid
3
-u nozeigt auch keine nicht bereitgestellten Dateien an. -unofunktioniert wie gewünscht und zeigt nicht inszeniert, versteckt sich aber nicht verfolgt.
Auch das ist nicht ganz richtig. git status -u Xist äquivalent zu git status X -u( Xist kein Argument für -u). Dies ist wiederum äquivalent zu git status X(weil -uohne Argument die Standardeinstellung ist -u). Daher ist es einfach ein Git-Status in der Datei X. Also, wenn Xist noes einfach versucht , einen Git - Status auf einer Datei zu tun genannt no, die Sie haben wahrscheinlich nicht
Aaron McDaid
2
Wenn Sie nicht unter einem Unix-ähnlichen Betriebssystem arbeiten, funktioniert dies unter Windows mit PowerShell
Die .gitignoreDatei muss jedoch eine neue leere Zeile haben, andernfalls wird Text an die letzte Zeile angehängt, unabhängig davon, ob sie Inhalt enthält.
Wenn Sie eine Menge untracked - Dateien und wollen nicht zu „ gitignore“ alle von ihnen zu beachten , dass, da git 1.8.3 (April, 22. 2013) , git statuswird das erwähnen , --untracked-files=noauch wenn Sie diese Option nicht in die hinzugefügt haben erster Platz!
" git status" schlägt Benutzern vor, die Verwendung der --untracked=noOption zu prüfen, wenn dies zu lange dauert.
Ich bin hierher gekommen, um ein etwas anderes Problem zu lösen. Vielleicht ist dies für jemand anderen nützlich:
Ich erstelle einen neuen Zweig feature-a. Als Teil dieses Zweigs erstelle ich neue Verzeichnisse und muss .gitignore ändern, um einige davon zu unterdrücken. Dies passiert häufig, wenn einem Projekt neue Tools hinzugefügt werden, mit denen verschiedene Cache-Ordner erstellt werden. .serverless, .terraformUsw.
Bevor ich bereit bin, das wieder mit dem Master zusammenzuführen, ist noch etwas anderes aufgetaucht, also checke ich mastererneut aus, git statusnehme aber jetzt diese unterdrückten Ordner wieder auf, da der .gitignore noch nicht zusammengeführt wurde.
Die Antwort hier ist eigentlich einfach, obwohl ich diesen Blog finden musste, um es herauszufinden:
Checken Sie einfach die .gitignore-Datei aus dem feature-aZweig aus
*
Wille ist sehr wahrscheinlich nicht das, was Sie wollen.-u no
ist falsch.-uno
ist richtig.-u no
versucht, einen Status für eine Datei namensno
! Dasno
ist kein Argument dafür-u
. Umno
die Interpretation als Argument zu erzwingen-u
, darf kein Leerzeichen vorhanden sein. Um dies zu testen, tun Sietouch Invalid
und vergleichen Siegit status -uInvalid
mitgit status -u Invalid
.Antworten:
Wie bereits gesagt, um vom Status auszuschließen, verwenden Sie einfach:
Wenn Sie stattdessen aktuell nicht verfolgte Dateien dauerhaft ignorieren möchten, können Sie im Stammverzeichnis Ihres Projekts Folgendes starten:
Bei jedem nachfolgenden Aufruf von
git status
werden diese Dateien explizit ignoriert.UPDATE : Der obige Befehl hat einen kleinen Nachteil: Wenn Sie noch keine
.gitignore
Datei haben, ignoriert sich Ihr Gitignore selbst! Dies geschieht, weil die Datei.gitignore
erstellt wird, bevor diegit status --porcelain
ausgeführt wird. Wenn Sie noch keine.gitignore
Datei haben, empfehle ich Folgendes:Dadurch wird eine Unterschale erstellt, die vor dem Erstellen der
.gitignore
Datei abgeschlossen wird.BEFEHLSERKLÄRUNG, da ich viele Stimmen bekomme (danke!) Ich denke, ich sollte den Befehl besser ein wenig erklären:
git status --porcelain
wird anstelle von verwendet,git status --short
weil manuelle Zustände "Geben Sie die Ausgabe in einem einfach zu analysierenden Format für Skripte an. Dies ähnelt der kurzen Ausgabe, bleibt jedoch über Git-Versionen hinweg und unabhängig von der Benutzerkonfiguration stabil." Wir haben also sowohl die Analysefähigkeit als auch die Stabilität;grep '^??'
filtert nur die Zeilen??
, die mit beginnen , die laut Git-Status-Handbuch den nicht verfolgten Dateien entsprechen;cut -c4-
Entfernt die ersten 3 Zeichen jeder Zeile, wodurch nur der relative Pfad zur nicht verfolgten Datei angegeben wird.|
Symbole sind Pipes , die die Ausgabe des vorherigen Befehls an die Eingabe des folgenden Befehls übergeben.>>
und>
sind Umleitungsoperatoren , die die Ausgabe des vorherigen Befehls an eine Datei anhängen oder eine neue Datei überschreiben / erstellen.Eine weitere Variante für diejenigen, die es vorziehen ,
sed
anstelle vongrep
und zu verwendencut
, hier ist ein anderer Weg:quelle
cut -c4-
Entfernt die ersten 4 Zeichen jeder Zeile, wodurch nur der relative Pfad zur nicht verfolgten Datei angegeben wird. Nr.-c
Markiert den Anfang einer Liste der zu schneidenden Spaltennummern. Und4-
wählt die Zeile von Spalte 4 bis zum Ende aus, wodurch die Spalten 1-3 abgeschnitten werden. Ihr Befehl zum Ausschneiden entfernt also tatsächlich die ersten 3 Zeichen jeder Zeile. Wenn Sie 4 Zeichen aus einer Git-Statuszeile wie der für diese Datei hier?? app/views/static_pages/contact.html.erb
entfernen würden, würden Sie den ersten Buchstaben von entfernenapp
. Der Befehl ist also korrekt, aber die Erklärung ist fehlerhaft.-u no
funktioniert bei mir nicht Aber-uno
tut es. Ich habe die Antwort entsprechend aktualisiert. Das ist seltsames Design für Git. Ich bin auf Git 1.7.1Wenn Sie diese Dateien dauerhaft ignorieren möchten, können Sie sie auf einfache Weise hinzufügen
.gitignore
:git ls-files --others --exclude-standard >> .gitignore
Dadurch werden alle Dateien in nicht verfolgten Verzeichnissen aufgelistet, die möglicherweise Ihren Wünschen entsprechen oder nicht.
quelle
.gitignore
2) Wenn Sie ein nicht verfolgtes Verzeichnis haben, listet dieses jeweils und auf Jede einzelne Datei darin, aber nicht das nicht verfolgte Verzeichnis selbst (damit Sie das Verzeichnis nicht ignorieren und zukünftige Dateien im Verzeichnis weiterhin als nicht verfolgt gemeldet werden, während die akzeptierte Datei nur das Verzeichnis und nicht die darin nicht verfolgten Dateien auflistet Dies ist eine Frage dessen, was Sie tun möchten, aber oft möchten Sie einfach das ganze Verzeichnis ignorierengit config status.showUntrackedFiles no
.Fand es im Handbuch
git status -uno
quelle
Zwei Wege:
Verwenden Sie das Argument "-uno" für den Git-Status. Hier ist ein Beispiel:
Oder Sie können die Dateien und Verzeichnisse zu .gitignore hinzufügen. In diesem Fall werden sie nie angezeigt.
quelle
.gitignore
Wesen zu bearbeitengit status | cat >> temp && vim temp
. Bearbeiten Sie dann die Datei so, dass die ersten und letzten Zeilen sowie die nachfolgenden#
und die Leerzeichen danach gelöscht werden . Danncat temp >> .gitignore && rm temp
. Falls noch keine.gitignore
vorhanden war, reichtmv temp .gitignore
dies aus. Hässliches Zeug, aber besser als das.gitignore
manuelle Aktualisieren .-uno
. Wenn Sie verwenden-u no
, entspricht diesno -u
- es wird ein Status für eine aufgerufene Dateino
(die wahrscheinlich nicht vorhanden ist) ausgeführt und der Standardmodus verwendet-u
. dh es ist gleichbedeutend mitgit status no
-u no
zeigt auch keine nicht bereitgestellten Dateien an.-uno
funktioniert wie gewünscht und zeigt nicht inszeniert, versteckt sich aber nicht verfolgt.quelle
git status -u X
ist äquivalent zugit status X -u
(X
ist kein Argument für-u
). Dies ist wiederum äquivalent zugit status X
(weil-u
ohne Argument die Standardeinstellung ist-u
). Daher ist es einfach ein Git-Status in der DateiX
. Also, wennX
istno
es einfach versucht , einen Git - Status auf einer Datei zu tun genanntno
, die Sie haben wahrscheinlich nichtWenn Sie nicht unter einem Unix-ähnlichen Betriebssystem arbeiten, funktioniert dies unter Windows mit PowerShell
git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore
Die
.gitignore
Datei muss jedoch eine neue leere Zeile haben, andernfalls wird Text an die letzte Zeile angehängt, unabhängig davon, ob sie Inhalt enthält.Dies könnte eine bessere Alternative sein:
$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore
quelle
Wenn Sie eine Menge untracked - Dateien und wollen nicht zu „
gitignore
“ alle von ihnen zu beachten , dass, da git 1.8.3 (April, 22. 2013) ,git status
wird das erwähnen ,--untracked-files=no
auch wenn Sie diese Option nicht in die hinzugefügt haben erster Platz!quelle
Ich bin hierher gekommen, um ein etwas anderes Problem zu lösen. Vielleicht ist dies für jemand anderen nützlich:
Ich erstelle einen neuen Zweig
feature-a
. Als Teil dieses Zweigs erstelle ich neue Verzeichnisse und muss .gitignore ändern, um einige davon zu unterdrücken. Dies passiert häufig, wenn einem Projekt neue Tools hinzugefügt werden, mit denen verschiedene Cache-Ordner erstellt werden..serverless
,.terraform
Usw.Bevor ich bereit bin, das wieder mit dem Master zusammenzuführen, ist noch etwas anderes aufgetaucht, also checke ich
master
erneut aus,git status
nehme aber jetzt diese unterdrückten Ordner wieder auf, da der .gitignore noch nicht zusammengeführt wurde.Die Antwort hier ist eigentlich einfach, obwohl ich diesen Blog finden musste, um es herauszufinden:
Checken Sie einfach die .gitignore-Datei aus dem
feature-a
Zweig ausquelle