it-swarm.com.de

.gitignore wird von Git ignoriert

Meine .gitignore-Datei scheint von Git ignoriert zu werden - könnte die .gitignore-Datei beschädigt sein? Welches Dateiformat, welches Gebietsschema oder welche Kultur erwartet Git?

Mein .gitignore:

# This is a comment
debug.log
nbproject/

Ausgabe von git status:

# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       debug.log
#       nbproject/
nothing added to commit but untracked files present (use "git add" to track)

Ich möchte, dass debug.log und nbproject/ nicht in der Liste der nicht protokollierten Dateien angezeigt werden.

Wo soll ich anfangen, das Problem zu beheben?

1234
Matt Parkins

Fest. OK, ich habe die .gitignore-Datei unter Windows in Notepad erstellt und funktionierte nicht. Wenn ich mir die .gitignore-Datei unter Linux ansehe, sah es aus wie organisiertes Kauderwelsch - vielleicht hatte Notepad Unicode geschrieben anstatt ASCII oder was auch immer 8-Bit ist.

Also habe ich die Datei auf meiner Linux-Box neu geschrieben, und wenn ich sie wieder in Windows packe, funktioniert das einwandfrei! Hurra!

152
Matt Parkins

Selbst wenn Sie die Dateien bisher nicht verfolgt haben, scheint Git in der Lage zu sein, sie zu kennen, auch nachdem Sie sie zu .gitignore hinzugefügt haben.

HINWEIS: Bestätigen Sie zuerst Ihre aktuellen Änderungen, sonst verlieren Sie sie.

Führen Sie dann die folgenden Befehle aus dem obersten Ordner Ihres Git-Repositorys aus:

git rm -r --cached .
git add .
git commit -m "fixed untracked files"
2601
Alin Huruba

Wenn es so aussieht, als ob Git die Änderungen, die Sie an Ihrer .gitignore-Datei vorgenommen haben, nicht bemerkt, sollten Sie die folgenden Punkte prüfen:

  • Möglicherweise gibt es eine globale .gitignore-Datei, die die lokale Datei beeinträchtigen könnte
  • Wenn Sie einer .gitignore-Datei etwas hinzufügen, versuchen Sie Folgendes:

    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
    
  • Wenn Sie etwas aus einer .gitignore-Datei entfernen und die obigen Schritte nicht funktionieren, versuchen Sie Folgendes :

    git add -f [files you want to track again]
    git commit -m "Refresh removing files from .gitignore file."
    
    // For example, if you want the .Java type file to be tracked again,
    // The command should be:
    //     git add -f *.Java
    
257
ifeegoo

Ohne ein weiteres Commit zu Ihrem Projekt hinzuzufügen, reicht eine Zeile aus, damit .gitignore so funktioniert, wie es soll:

git rm -r --cached debug.log nbproject

Dadurch werden sie aus dem Repository entfernt, bleiben jedoch physisch erhalten. Im Klartext werden alle darauf bezogenen Änderungen in der Vergangenheit gelöscht, und ihre Änderungen werden auch nicht in zukünftigen Verpflichtungen nachverfolgt. Eine bessere Erklärung finden Sie hier .

91
H Aßdøµ

Eine weitere Ursache für dieses Problem sind Leerzeichen oder Tabulatoren vor der Anweisung:

Beispiel:

# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*

Und wie der Kommentar unten zeigt, kann auch ein Leerzeichen ein Thema sein:

# Be aware of the following:
notWorkingIgnore.* #<-Space
workingIgnore.*#<-Nospace
37
Rawa

Ich habe festgestellt, dass die Kodierung von .gitignore Auswirkungen hatte - wenn die Datei Unicode war, wurde sie ignoriert, wenn sie ASCII war, war sie nicht.

Verarbeiten:

  1. Status überprüfen: PS> git status
  2. Erstellen Sie eine Funktion für Get-FileEncoding
  3. Testen Sie die Kodierung von .gitignore: PS> Get-FileEncoding .gitignore
  4. Ändern Sie die Kodierung in ASCII: PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  5. Bestätigen Sie: PS> git status
30
craig

Wie bei den anderen Lösungen, verpflichten Sie sich zuerst zu einem Commit und beachten Sie, dass Sie Will nicht festgeschriebene Änderungen verlieren.

Ich hatte bessere Ergebnisse damit:

git rm -r --cached .
git reset HEAD --hard
git status

Beachten Sie, dass der Status jetzt keine modifizierten Dateien enthalten sollte.

23
Steven Stark

Alle Antworten hier sind eigentlich Problemumgehungen. Sie müssen die .gitignore-Datei vor erstellen, die Sie git init ausführen. Andernfalls wird git nie erfahren, dass Sie diese Dateien ignorieren müssen, da sie bereits verfolgt wurden.

echo .idea/ >> .gitignore
git init

Wenn Sie sich täglich entwickeln, empfehle ich Ihnen, Ihre gewohnheitsmäßig ignorierten Dateien in Ihre ~/.gitignore_global-Datei aufzunehmen. Auf diese Weise weiß git bereits, welche Dateien Sie (das heißt "Ihr Benutzer", da es sich um eine Datei in Ihrem Heimatverzeichnis handelt) normalerweise ignorieren.

14
CESCO

In meinem Fall liegt das daran, dass die Dateien bereits im Repository vorhanden sind und ich versuche, sie zu ignorieren.

Dies sind die Dinge, die ich zur Behebung des Problems unternommen habe:

  • Kopieren Sie die Dateien in einen temporären Ordner
  • Entfernen Sie sie aus meinem Projektordner.
  • Übernehmen Sie die Änderungen, die diese Dateien aus dem Repository entfernen
  • Fügen Sie diese Dateien wieder meinem Projektordner hinzu

Bis dahin wurden alle an diesen Dateien vorgenommenen Änderungen ignoriert.

Ich denke, Sie können keine Dateien ignorieren, die bereits im Repository vorhanden sind.

13
Edesa

Schauen Sie sich auch dasVerzeichnis an wo Sie .gitignore eingeben.

Es sollte sich in der Wurzel Ihres Projekts befinden :

./myproject/.gitignore

Nicht in

./myproject/.git/.gitignore
11
Artem Zaytsev

Es gibt ein weiteres Problem mit .gitignore, das insbesondere für Windows-Benutzer auftreten kann. Git mag es nicht, wenn Sie .gitignore benennen (wie unity.gitignore).

Sie möchten es immer .gitignore nennen, oder unter Windows .gitignore., da Windows der Meinung ist, dass Sie versuchen, es ohne Dateinamen umzubenennen.

7
Goldblaze

Ich bin gerade auf dieses Problem gestoßen. Der Inhalt meiner .gitignore-Datei wurde weiterhin in der Liste der nicht protokollierten Dateien angezeigt.

Ich habe dies verwendet, um die Ignorier-Datei zu erstellen:

echo "node_modules" > .gitignore

Es stellt sich heraus, dass die Doppelzitate das Problem für mich verursacht haben. Ich habe die Ignorier-Datei gelöscht und den Befehl dann erneut ohne Anführungszeichen verwendet. Ich musste mich nicht mit der Dateikodierung beschäftigen. Ich bin auf einem Windows 10-Computer mit Cmder .

Beispiel:

echo node_modules > .gitignore
6
bprdev

Ich hatte dieses Problem mit einem .gitignore mit dieser Zeile:

lib/ext/

Ich habe gerade erkannt, dass dieses Verzeichnis tatsächlich ein symbolischer Link zu einem Ordner an anderer Stelle ist:

ls -la lib/ext/
lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib

In der Zeile lib/ext/ sucht git tatsächlich nach einem Ordner , aber ein symbolischer Link ist eine Datei , daher wird mein lib-Ordner nicht ignoriert.

Ich habe dies behoben, indem ich lib/ext/ durch lib/ext in meinem .gitignore ersetzte.

5
roipoussiere

Speziell für Windows-Benutzer: Wenn Sie nicht abgehackte Dateien haben und das Löschen/Löschen der zwischengespeicherten Dateien nicht funktioniert. Versuchen Sie, Powershell zu öffnen und die .gitignore-Datei in UTF-8-Kodierung zu konvertieren.

1) $ Myfile = Get-Content ..gitignore

2) $ Myfile = | Out-File -Encoding "UTF8" .gitignore

Sie müssen dies nur einmal tun, um die .gitignore-Datei für dieses Verzeichnis zu codieren. Da die Datei dann bei jeder Bearbeitung der Datei korrekt codiert wird, sollte sie funktionieren. Ich glaube, das liegt daran, dass GitHub keine UTF-8-Kodierung für eine .gitignore-Datei lesen wollte. Meines Wissens ist dieses Problem für Windows noch nicht gelöst. Ein nicht allzu großer Deal, nur schwer zu debuggen, wenn es nicht funktioniert.

5
maximusg

Für mich funktionierte keine der vorherigen Antworten. Ich musste .gitignore-Text in die exclude.txt-Datei kopieren, die unter gefunden wurde 

<Your-project-folder>\.git\info

Sobald Sie fertig sind, aktualisieren Sie Ihre Änderungen und alle nicht aufgespürten Dateien sind verschwunden. Übernehmen Sie wie gewohnt.

5
raga

Mein Problem war (wie von OP vorgeschlagen) eine beschädigte .gitignore-Datei. Ich glaubte es nicht und ignorierte die Möglichkeit, bis alles andere fehlschlug. Die beschädigte wurde nicht in viangezeigt, aber am Anfang der Datei befanden sich zwei Bytes, durch die die .gitignore-Datei ignoriert wurde. Für mich tauchten diese erst auf, als ich cat .gitignore eingab, was folgendes zeigte:

��# Built application files
*.apk
*.ap_

# ...

Keine Ahnung, wie diese dort gelandet sind, aber das Wiederherstellen der Datei hat das Problem behoben. Eine Hex-Analyse der beschädigten Datei zeigte Folgendes:

[email protected] ~/project/myproject $ xxd -b .gitignore 
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.
5
pcdev

Ich hatte das gleiche Problem. Ich glaube, das Problem war eine Abweichung zwischen CR und LF. Ich habe Dinge in meinem .gitignore mit CMD (unter Windows 7) und dem folgenden Befehl verstaut:

Schlecht:

echo "file_to_be_ignored.py" >> .gitignore<br>
echo "*~" >> .gitignore

Usw.

Das Problem war, dass dieser Befehl nicht die korrekte Zeilenende-Markierung setzt, damit Git die Zeilenumbrüche erkennt (entweder CR oder CR + LF, wenn Git die andere erwartet). Ich löste das Problem durch manuelles Ersetzen der einzelnen Zeilen in Vim (Vim zur Rettung!) Und es funktionierte perfekt.

Versuchen Sie, Ihren .gitignore in Notepad ++ oder Vim (idealerweise) zu bearbeiten. Auch wenn die Datei so aussieht, als wäre sie richtig formatiert, ersetzen Sie die Zeilenumbrüche. Es hört sich komisch an, ich weiß, aber es hat für mich funktioniert. : D

4
fictivelogic

OK, also hat die akzeptierte Lösung in meinem Fall nicht funktioniert.

Wird Ihre .gitignore-Datei von Visual Studio 2013 ignoriert?

Zusamenfassend:

  • Schließen Sie Visual Studio.
  • Navigieren Sie zu Ihrem .git-Ordner
  • ms-persist.xml löschen
  • Starten Sie Visual Studio neu
3
Bartosz

Eine Sache, die Sie auch beachten sollten: Speichern Sie Ihre .gitignore-Datei mit den richtigen Zeilenenden?

Windows:

Wenn Sie es unter Windows verwenden, speichern Sie es mit Windows-Zeilenenden? Nicht alle Programme machen dies standardmäßig; Notepad ++ und viele PHP - Editoren verwenden standardmäßig Linux-Zeilenenden, sodass die Dateien serverkompatibel sind. Eine einfache Möglichkeit, dies zu überprüfen, ist das Öffnen der Datei in Windows Notepad. Wenn alles in einer Zeile erscheint, wurde die Datei mit Linux-Zeilenenden gespeichert.

Linux:

Wenn Sie Probleme mit der Datei in einer Linux-Umgebung haben, öffnen Sie die Datei in einem Editor wie Emacs oder nano . Wenn Sie nicht druckbare Zeichen sehen, wurde die Datei mit Windows-Zeilenenden gespeichert.

2
Beachhouse

Eine knifflige Sache, die von den anderen Antworten hier nicht behandelt wird, ist, dass die .gitignore-Datei nicht funktioniert, wenn Sie Inline-Kommentare wie diese haben:

foo/bar # The bar file contains sensitive data so we don't want to make this public

Wenn Sie solche Kommentare haben, ändern Sie sie wie folgt:

# The bar file contains sensitive data so we don't want to make this public
foo/bar
1
James

Es ist auch möglich, dass Sie die .gitignore-Datei mit einem Sudo-Befehl bearbeitet haben. Ich bin auf das gleiche Problem gestoßen und habe beim Ausführen der Befehle: git status die Dateien "sollte ignoriert werden" angezeigt.

Bei der Bearbeitung mit nano .gitignore anstelle von Sudo nano .gitignore konnte ich die korrekte Spiegelung sehen.

1
aviral sanjay

Ich habe auch das gleiche Problem unter Ubuntu, ich habe den .gitignore vom Terminal aus erstellt und es funktioniert für mich

touch .gitignore

1
Chawki

Ein weiterer möglicher Grund - einige Instanzen von Git-Clients, die gleichzeitig ausgeführt werden . Zum Beispiel "Git Shell" + "GitHub Desktop" usw.


Das ist mir passiert, ich habe "GitHub Desktop" als Hauptclient verwendet und einige neue .gitignore-Einstellungen ignoriert: commit after commit:

  1. Du begehst etwas.
  2. Als nächstes wird ein Commit ausgeführt: Die .gitignore-Einstellungen werden ignoriert. Commit enthält viele temporäre Dateien, die im .gitignore aufgeführt sind.
  3. Leeren Sie den Git-Cache. Überprüfen Sie, ob .gitignore UTF8 ist. Dateien entfernen -> festschreiben -> Dateien zurückschieben; 1 Commit überspringen - nichts hat geholfen.

Grund : Der Visual Studio-Code-Editor wurde im Hintergrund mit demselben geöffneten Repository ausgeführt. VS Code verfügt über eine integrierte Git-Steuerung, die zu Konflikten führt.

Lösung : Überprüfen Sie mehrere, versteckte Git-Clients und verwenden Sie nur einen Git-Client gleichzeitig, insbesondere beim Leeren des Git-Cache.

0
Oleg Zarevennyi

Meins funktionierte nicht, weil ich buchstäblich ein Textdokument mit dem Namen .gitignore erstellt habe

Erstellen Sie stattdessen ein Textdokument, öffnen Sie es in Notepad ++ und speichern Sie es als .gitignore

Stellen Sie sicher, dass Sie beim Speichern in der Dropdown-Liste Alle Typen (*. *) Auswählen.


Oder verwende in gitbash einfach touch .gitignore

0
Kari

Ich habe .gitignore mit Echo "..."> .gitignore in Powershell in Windows erstellt, da ich es nicht im Explorer erstellen kann.

Das Problem in meinem Fall war die Codierung der erstellten Datei, und das Problem wurde behoben, nachdem ich es in ANSI geändert hatte.

0
Ahmad

Wenn Sie ein Notepad ++ - Benutzer sind, versuchen Sie Folgendes:

Öffnen Sie Ihre .gitignore-Datei mit Notepad ++ und führen Sie folgende Schritte aus:

Bearbeiten> EOL-Konvertierung> Windows-Format> Speichern

Versuchen Sie es erneut mit git status und sehen Sie, ob es für Sie funktioniert hat.

Ich habe die Antwort auf eine ähnliche Frage gepostet hier .

0
Ozesh

Entfernen Sie einfach den Ordner oder die Datei, die zuvor in Git festgeschrieben wurde, mit dem folgenden Befehl. Die gitignore-Datei zeigt dann die korrekten Dateien an.

    git rm -r -f "folder or files insides"
0
Atif Hussain

Für mich war das ein weiteres Problem. Mein .gitignore ist so eingerichtet, dass er alles außer dem ignoriert, was ich sage. Wie solche:

/*
!/content/

Das bedeutet natürlich, dass ich auch git sage, den .gitignore selbst zu ignorieren. Das war kein Problem, solange ich den .gitignore nicht aufspürte. Aber irgendwann habe ich den .gitignore selbst verpflichtet. Dies führte dann dazu, dass der .gitignore richtig ignoriert wurde.

Durch das Hinzufügen einer weiteren Zeile wurde das Problem behoben:

/*
!/content/
!.gitignore
0
user8118328