Git ignoriert Dateien, die nicht in gitignore enthalten sind

117

Ich habe ein Git-Repository, das Bilddateien sowie einige andere Dateien .gitignoreignoriert , aber in meiner Datei wird nur eine config.phpDatei ignoriert . Gibt es irgendwo eine globale Ignorierdatei, die ich scheinbar nicht finden kann? Ich muss Dateien angeben, um sie jetzt hinzuzufügen, und es gibt mir diese Warnung:

Die folgenden Pfade werden von einer Ihrer .gitignore-Dateien ignoriert.

Der Inhalt meiner ~/.gitconfigDatei ist nur meine E-Mail-Adresse.

Ian Hunter
quelle
Siehe auch
krlmlr

Antworten:

197

git check-ignore

Verwenden Sie den git check-ignoreBefehl , um Ihre Gitignore-Datei zu debuggen (Dateien ausschließen).

Beispielsweise:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

Die obigen Ausgabedetails zum Übereinstimmungsmuster (falls vorhanden) für jeden angegebenen Pfadnamen (einschließlich Zeile).

Vielleicht wird Ihre Dateierweiterung nicht ignoriert, sondern das gesamte Verzeichnis.

Das zurückgegebene Format lautet:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

Oder verwenden Sie den folgenden Befehl, um Ihren .gitignoreHOME- und Repository-Ordner im Benutzer zu drucken :

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

Alternativ git add -fkönnen Sie auch andere ignorierte Dateien hinzufügen.

Siehe auch : man gitignore, man git-check-ignoreum weitere Informationen zu .

Syntax

git check-ignore [Optionen] Pfadname…

git check-ignore [Optionen] --stdin

Kenorb
quelle
5
Dies ist viel besser als die akzeptierte Antwort. Nichts für ungut, aber das hat mir den Tag gerettet. Danke Kenorb.
Luanjunyi
1
Verdient mehr positive Stimmen. Fand heraus, dass ein seltsamer Gitignore in einigen / vendor / -Ordnern Probleme mit der neuesten Git-Version verursachte.
Manuel Arwed Schmidt
2
Dieser hat mich heute gerettet ... es scheint, dass Visual Studio eine Datei namens gitignore_global.txt im Benutzerdokumentordner erstellt hat und dabei Dateien ignoriert hat, die ich nicht (un) ignorieren konnte
Samuel
1
Perfekt gelöst mein Problem. Einige Muster sind nicht leicht mit dem Auge zu fangen !!
Willa
54

Es ist möglicherweise gut zu wissen, dass Ihre Git-Konfiguration eine core.excludes-Datei enthalten kann, die einen Pfad zu einer Datei mit zusätzlichen Mustern darstellt, die ignoriert werden. Sie können herausfinden, ob Sie eine solche Konfiguration haben, indem Sie Folgendes ausführen (im problematischen Git-Repo):

git config core.excludesfile

Wenn ein Dateipfad gedruckt wird, überprüfen Sie den Inhalt dieser Datei auf weitere Informationen.

In meinem Fall habe ich git über eine alte Version von boxen installiert, die das Muster 'Icon?' Ignorierte. Das gab mir in meinem Fall die in dieser Frage erwähnte Warnung für Ordnersymbole (ich bin in einem Dateisystem, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, daher stimmt das Symbol mit den Symbolen überein).

gabrielf
quelle
2
Das war in der Tat mein Problem. Ich bin mir nicht sicher, wie oder wann diese Datei bearbeitet wird, aber sie
enthielt die
2
Danke, du hast mir Stunden purer Qual erspart. In meinem Fall war es die Installation des Quellbaums (ein Tool zur Visualisierung von Git Repo), das unlogisch unter dem Dokumentenordner eine gitignore_global.txt erstellt hat, die viele Ausschlüsse enthielt.
Mechanisches Objekt
Ich hatte das gleiche verdammte Icon?Ignorieren.
Justin Skiles
Dies war bei mir der Fall. Hatte einige Regeln in der globalen Ignorierdatei. Danke für den Tipp +1
Madness
Ich hatte * .json in meinem globalen Ignorieren - rede über einen Albtraum - danke!
Jason Perfetto
31

Guck dir diese an:

  1. Haben Sie nach anderen .gitignore-Dateien gesucht, da es viele davon geben kann?

  2. Sehen Sie sich auch REPO / .git / config an, um festzustellen, ob dort etwas vorhanden ist.

  3. Repo-Ausschluss Lokale Per-Repo-Regeln können zur .git / info / exclude-Datei in Ihrem Repo hinzugefügt werden. Diese Regeln werden nicht mit dem Repo festgelegt, sodass sie nicht mit anderen geteilt werden. Diese Methode kann für lokal generierte Dateien verwendet werden, von denen Sie nicht erwarten, dass sie von anderen Benutzern generiert werden, z. B. von Ihrem Editor erstellte Dateien.

gahooa
quelle
Es gibt keine anderen Gitignore-Dateien im Repository und auch nichts in der Git / Config-Datei, das etwas ignoriert. Wie ist .git / info / exclude konfiguriert?
Ian Hunter
4
Es ist nicht klar, warum diese Antwort als beantwortet markiert ist. Wie genau wurde dieses Problem behoben?
Nächster Entwickler
ausschließen war mein problem. Ich wusste, dass es einen anderen Weg gab, den ich in der Vergangenheit benutzt hatte, aber vergessen, wo er war!
Chucky
22

Ich hatte das gleiche Problem - ein Verzeichnis wurde von git mit diesem Fehler ignoriert:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

Ich fand schließlich heraus, dass mein Problem eine Zeile in meinem war ~/.gitignore_global:

TAGS

das stimmte mit dem Pfad überein app/views/admin/tags. Ich habe es behoben, indem ich der globalen Gitignore-Datei einen führenden Schrägstrich hinzugefügt habe

/TAGS

und git fing wieder an mein verzeichnis zu verfolgen.

Shevaun
quelle
3
+1, damit ich nach Teilübereinstimmungen suche ... gitignore_global.txt enthielt "[Rr] elease * /", wodurch mein Verzeichnis "releasenotes" ignoriert wurde.
Trev
Um es noch schwieriger zu machen, ignoriert git nur neu hinzugefügte Dateien, nicht solche, die sich bereits im Repo befinden. Als ich meinem .gitignore "foo /" hinzufügte, wurden nur kürzlich hinzugefügte Dateien in foo-Unterverzeichnissen und nicht alle Dateien ignoriert. Ich brauchte eine Stunde, um herauszufinden, warum einige Dateien ignoriert wurden und andere nicht.
Ccleve
Ich habe das gleiche Problem. SourceTree legt die Datei ~ / .gitignore_global im Menü Extras-> Optionselement-> Registerkarte Git fest. Nachdem ich das Feld Global Ignore list "git add ..." aufgeräumt hatte, funktionierte der Befehl.
Kate
Ich hatte das gleiche Problem. Ich hatte ein helpVerzeichnis, das ignoriert wurde. Zum Glück habe ich Ihre Antwort ziemlich schnell gefunden.
Abdul Sadik Yalcin
9

Für mich hatte ich versehentlich einen Platzhalter in meiner ~ / .gitignore_global-Datei. Vielleicht dort nachsehen?

Brian
quelle
1
Das war genau das Problem für mich. Ich hatte * .png dort, keine Ahnung, wie es dort ankam.
Shahar
3

Eine andere Sache zu versuchen: Ich hatte ein Verzeichnis B mit einem eigenen .gitRepository unter meinem Projektverzeichnis A verschachtelt (aber nicht als Submodul). Ich habe einige Änderungen an B vorgenommen und wollte daraus ein bonafides Submodul machen. Ich glaube, Git A hat B automatisch ignoriert, weil es ein eigenes Repository enthielt (siehe Verschachtelte Git-Repositorys ohne Submodule? ). Ich habe den B-Ordner umbenannt und versucht, ihn erneut als Submodul zu klonen. Dies führte zu der irreführenden Fehlermeldung "Von .gitignore ignoriert". Die Lösung bestand darin .git, aus B zu löschen .

Matt Montag
quelle
2

Ich hatte genau das gleiche Problem wie Sie. Die einzige Antwort, die Sie erhalten haben, sind einige Stellen, die überprüft werden müssen, aber keine hat das Problem für mich gelöst, und aus Ihrem Kommentar denke ich auch nicht für Sie. Ich hatte keine ANDEREN .gitignore-Dateien, die sich weiter unten im Verzeichnisbaum versteckten. nichts in .git / config; nichts in .git / ingore / exclude

Wenn Sie das Problem weiterhin haben, überprüfen Sie es diese Antwort . Es hat das Problem für mich gelöst

Suchen Sie grundsätzlich nach einer ~ / .gitignore-Datei. Meins hieß ~ / .gitignore_global. Ich weiß nicht, wann es erstellt wurde ( ich habe es sicherlich nicht geschafft), aber ich habe bei der ersten Installation eine Menge verschiedener Git-Setups ausprobiert, also muss einer von ihnen es dort abgelegt haben.

Hoffe, seine Antwort hilft dir auch!

Bukov
quelle
1

Ein weiterer Grund für den Empfang dieser Fehlermeldung von git ist das Ausführen des git submodule addBefehls, während ein vorheriger git-Befehl abgestürzt ist und die Sperrdatei verlassen hat (dies kann beispielsweise passieren, wenn Sie benutzerdefinierte Skripts verwenden, die git-Befehle enthalten, und die nicht notiert haben Absturz).

Wenn Sie git commitstattdessen den Befehl ausführen , während sich keine der Bedingungen geändert hat ( git submodule addwird immer wieder schreien, dass Ihre .gitignoreDateien schuld sind), wird stattdessen ein weiterer Fehlerbericht angezeigt:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

und tatsächlich das Löschen der Sperrdatei:

rm .git/index.lock

behebt das Problem. (Dies passiert mit der Git-Version 2.1.0.9736. Möglicherweise wird dies in zukünftigen Git-Versionen behoben.)

Ger Hobbelt
quelle
Vielen Dank, dies stellte sich als das Problem heraus, das ich hatte. Lebensretter!
JDawgg
1

Überprüfen Sie, ob Sie die Berechtigung für den Ordner haben. Ich bin gerade darauf gestoßen und es lag daran, dass der Ordner dem Benutzer von www-data gehörte und nicht dem Benutzer, als den ich am Terminal angemeldet war.

Conrad Jones
quelle
1

In meinem Fall war es der Schrägstrich auf meinem Weg, der das Problem verursachte ...

Nicht arbeiten

/srv/bootstrap/

Arbeit

srv/bootstrap/
jwogrady
quelle
1

Eine weitere Sache: Wenn das Verzeichnis, in dem Sie sich befinden, Root-Zugriff zum Schreiben oder Ausführen erfordert, stellen Sie sicher, dass Sie sich im Root-Benutzer befinden. Ich habe tatsächlich einen seltsamen Fehler bekommen, als ich versucht habe, ein Submodul hinzuzufügen, und git hat sich immer wieder beschwert, dass der Pfad, in den ich geklont habe, von einer git-Ignorierdatei ignoriert wurde. Dann wechselte ich zum Root-Benutzer, führte das Submodul add erneut aus und es gab kein Problem.

Maharlikans
quelle
0

Bitte beachten Sie auch überprüfen ~/.gitignoreund ~/.gitignore_globaldie von einigen Git - Clients erstellt werden könnten (zB Atlassian SourceTree auf Mac OS X).

viviansteller
quelle
0

Stellen Sie sicher, dass die .gitignoreDatei sich selbst nicht ignoriert. Ein häufiger Fehler ist das Hinzufügen einer *Regel zur .gitignoreDatei, um jede Datei im aktuellen Ordner zu ignorieren. Die Lösung hierfür besteht darin, eine Ausnahme hinzuzufügen zu .gitignore:

*
!.gitignore

Auf diese Weise werden alle Dateien im Verzeichnis außer ignoriert .gitignore.

jfoliveira
quelle