So schließen Sie Dateien nur aus dem Stammordner in Git aus


399

Mir ist bekannt .gitignore, dass ich config.phpDateien verwende , um einige hinzugefügte Dateien auszuschließen, aber ich habe mehrere Dateien im Quellbaum und ich muss nur eine ausschließen, die sich im Stammverzeichnis befindet, während andere unter Revisionskontrolle bleiben.

Worauf sollte ich schreiben .gitignore, um dies zu ermöglichen?

Antworten:


588

Aus der Dokumentation :

Wenn das Muster keinen Schrägstrich / enthält, behandelt git es als Shell-Glob-Muster und sucht nach einer Übereinstimmung mit dem Pfadnamen in Bezug auf den Speicherort der Gitignore-Datei (relativ zur obersten Ebene des Arbeitsbaums, wenn nicht aus einem Gitignore) Datei).

Ein führender Schrägstrich entspricht dem Anfang des Pfadnamens. Beispielsweise stimmt "/*.c" mit "cat-file.c" überein, nicht jedoch mit "mozilla-sha1 / sha1.c".

Daher sollten Sie Ihrem Stammverzeichnis die folgende Zeile hinzufügen .gitignore:

/config.php

1
Vielen Dank! Ich habe es so versucht, aber aus irgendeinem Grund hat es nicht funktioniert. Wahrscheinlich irgendwo etwas falsch geschrieben =)
Pavel Karoukin

1
Was ist, wenn es sich nicht um eine Datei, sondern um einen Ordner handelt und ich diesen Ordner im Repo-Stammverzeichnis, die darin enthaltenen Dateien und alle untergeordneten Unterordner und deren Dateien ignorieren möchte? /folder/?
CodeManX

11
Entweder /folder/oder /folderwürde funktionieren, aber das Hinzufügen des Schrägstrichs an den Enden beschränkt die Übereinstimmung nur auf Ordner. Wenn Sie eine Datei mit dem Namen 'foo' im Stammverzeichnis hätten, /foo/würden Sie diese nicht ignorieren, aber /foowürden.
Dorf

Wenn Sie die Datei bereits festgeschrieben haben, führen Sie den Befehl aus git rm --cached <file>, da die Datei sonst nicht ignoriert wird. Von: stackoverflow.com/a/1274447
Bruno Polo


29

Ältere Versionen von git erfordern, dass Sie zuerst ein Ignoriermuster definieren und sofort (in der nächsten Zeile) den Ausschluss definieren. [getestet auf Version 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Spätere Versionen erfordern nur Folgendes [getestet in Version 2.2.1]

/config.php

17

Wenn die oben genannte Lösung für Sie nicht funktioniert, versuchen Sie Folgendes:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

Das funktioniert bei mir in der Tat, während das /config.phpallein nicht der Fall war. Ich bin gespannt warum das nicht so ist. Haben sie eine Idee?
iago-lito 'erwägt, den

@ iago-lito Wenn Sie an einem bestimmten Projekt arbeiten und Probleme damit haben, eine Datei.ext in einem bestimmten Verzeichnis zu ignorieren und sie gleichzeitig NICHT überall zu ignorieren, fügen Sie diese in die Datei /home/me/.gitignore ein: /home/me/path/to/my/project/some/folder/file.ext ODER file.ext, um die Datei überall und dann im Verzeichnis / home / me / path / to / my / project / some / folder / zu ignorieren. Die .gitignore-Datei legt diese! file.ext ab, um diese Datei NICHT nur in diesem bestimmten Verzeichnis zu ignorieren. Jeder Ordner kann eine eigene .gitignore-Datei haben, um alle Einstellungen der übergeordneten .gitignore-Datei (en) zu
überschreiben

Hm. Dies bedeutet, dass sich das Repo möglicherweise anders verhält, je nachdem, ob andere Benutzer andere ~/.gitignoreDateien auf ihren eigenen Computern haben, oder? .. Außerdem war mein Punkt: Sie haben geschrieben: "Wenn die obige Lösung nicht funktioniert", warum sollte es nicht?
iago-lito 'erwägt, den

Ja, wenn Ihr Projekt in einer unbekannten Umgebung vorhanden ist, sollten Sie sich niemals auf Gitignore-Dateien verlassen, die über Ihrem Projektstammordner vorhanden sind. Denken Sie daran, dass Dateinamen wie config.php häufig vorkommen. Überschreiben Sie daher alle möglicherweise vorhandenen Einstellungen für diese Datei in Ihrer Root-Gitignore-Datei.
Drugan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.