Lassen Sie .gitignore alles außer ein paar Dateien ignorieren

Lesezeit: 8 Minuten

Lassen Sie gitignore alles auser ein paar Dateien ignorieren
Andreas

Ich verstehe, dass eine .gitignore-Datei bestimmte Dateien vor der Versionskontrolle von Git verschleiert. Ich habe ein Projekt (LaTeX), das während der Ausführung viele zusätzliche Dateien (.auth, .dvi, .pdf, Protokolle usw.) generiert, aber ich möchte nicht, dass diese nachverfolgt werden.

Mir ist bewusst, dass ich es schaffen könnte (vielleicht sollte), dass alle diese Dateien in einem separaten Unterordner im Projekt abgelegt werden, da ich den Ordner dann einfach ignorieren könnte.

Gibt es jedoch eine praktikable Möglichkeit, die Ausgabedateien im Stammverzeichnis des Projektbaums zu behalten und .gitignore zu verwenden, um alles außer den Dateien zu ignorieren, die ich mit Git verfolge? Etwas wie

# Ignore everything
*

# But not these files...
script.pl
template.latex
# etc...

  • Duplikat von stackoverflow.com/q/9162919/321973 (ich weiß, das ist neuer, aber die Antwort dort ist richtiger). Eigentlich ist diese Antwort wahrscheinlich die beste

    – Tobias Kienzler

    9. Oktober 2012 um 9:10 Uhr


Lassen Sie gitignore alles auser ein paar Dateien ignorieren
Joakim Elofson

Ein optionales Präfix ! die das Muster negiert; Jede übereinstimmende Datei, die durch ein vorheriges Muster ausgeschlossen wurde, wird wieder eingeschlossen. Wenn ein negiertes Muster übereinstimmt, überschreibt dies Musterquellen mit niedrigerer Priorität.

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# ...even if they are in subdirectories
!*/

# if the files to be tracked are in subdirectories
!*/a/b/file1.txt
!*/a/b/c/*

  • Es sieht so aus, als ob dies auch Unterordner “ignoriert”, sodass Dateien mit dem Namen “script.pl” in einem anderen Verzeichnis als dem Stammverzeichnis sowieso nicht gefunden werden. Ich verwende dies jetzt (mit *.pl) und alle *.pl-Dateien werden ignoriert, obwohl sich viele in den Unterverzeichnissen unterhalb der .gitignore-Datei befinden

    – PandaWood

    6. November 2011 um 1:44 Uhr


  • @PandaWood Dieses Problem wurde hier angesprochen (stackoverflow.com). Es wird durch den ersten Ausdruck verursacht, der mit allem übereinstimmt, einschließlich Verzeichnissen, die Sie niemals negieren. Um das Problem zu beheben, fügen Sie (!*/) hinzu, das mit allen Unterverzeichnissen (rekursiv) im aktuellen Verzeichnis übereinstimmt. Dies hilft der übergeordneten Antwort nicht weiter, bei der bestimmte Dateien auf die Whitelist gesetzt werden (wenn sie sich in Unterverzeichnissen befinden, möchten Sie wahrscheinlich den vollständigen Pfad manuell angeben oder verzeichnisspezifische .gitignore-Dateien verwenden).

    – Simont

    10. Februar 2012 um 12:51 Uhr


  • Ich konnte das nicht zum Laufen bringen. Ich ignoriere einen Ordner (zB wp/), aber ich möchte einige Dateien tief in diesem Ordner NICHT ignorieren (z wp/path/to/some/location/*). Der einzige Weg, wie ich es zum Laufen bringen konnte, war, es zu tun git add -f wp/path/to/some/location/*

    – trusktr

    16. April 2012 um 23:36 Uhr


  • @trusktr Benutze simonts !*/ Ausnahme

    – Tobias Kienzler

    9. Oktober 2012 um 6:41 Uhr

  • Meine Güte, die letzte Regel: !*/ macht den Unterschied in meinen vergeblichen Versuchen, a zu streiten .gitignore Datei zu arbeiten. Danke sehr.

    – racl101

    22. Januar 2015 um 23:00 Uhr

Lassen Sie gitignore alles auser ein paar Dateien ignorieren
Giuseppe Galano

Wenn Sie den gesamten Inhalt eines Verzeichnisses außer einer darin enthaltenen Datei ignorieren möchten, können Sie ein Regelpaar für jedes Verzeichnis im Dateipfad schreiben. Z.B .gitignore zu ignorieren pippo Ordner außer von pippo/pluto/paperino.xml

pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml

Beachten Sie, dass, wenn Sie einfach oben geschrieben hätten:

pippo/*
!pippo/pluto/paperino.xml

Es würde nicht funktionieren, weil der Vermittler pluto Ordner würde für Git nicht existieren, also paperino.xml konnte keinen Ort finden, an dem er existieren konnte.

  • Ausgezeichnete Antwort, aber es ist erwähnenswert für alle, die später darauf stoßen foo und foo/* sind nicht das Gleiche. Damit das funktioniert, Sie brauchen benutzen foo/* für den Basisordner

    – das sieht lustig aus

    30. Juli 2016 um 16:13 Uhr


  • @Mayank Pippo ist Goofy auf Italienisch, Paperino ist Donald Duck und Pluto ist dasselbe wie auf Englisch. Früher waren sie ein sehr gebräuchliches Triplett von Variablennamen zum Programmieren von Samples. Es war schön, sie wieder zu lesen.. 🙂

    – Ghidello

    1. Februar 2017 um 20:47 Uhr


  • funktioniert bei mir nicht: node_modules/* !node_modules/bootstrap

    – SuperUberDuper

    13. September 2017 um 7:40 Uhr

  • Sie müssen enthalten !.gitignore sonst funktioniert das nicht. .gitignore Datei wird auch von Git nicht verfolgt

    – Suhaivs

    14. Juli 2018 um 2:38 Uhr

  • @simple_human Das wäre wahr, wenn er alles im Repository-Root ignorieren würde oder wenn er in den genannten Verzeichnissen eine .gitignore-Datei hätte, um die er sich kümmern müsste.

    – xNull

    14. Dezember 2018 um 13:58 Uhr


1646886490 599 Lassen Sie gitignore alles auser ein paar Dateien ignorieren
Ryan Taylor

Sie verwenden möchten /* anstatt * oder */ in den meisten Fällen

Verwenden * ist gültig, aber es funktioniert rekursiv. Von da an wird es nicht mehr in Verzeichnisse schauen. Die Leute empfehlen die Verwendung !*/ Verzeichnisse erneut auf die Whitelist zu setzen, aber es ist tatsächlich besser, den Ordner der höchsten Ebene mit auf die Blacklist zu setzen /*

# Blacklist files/folders in same directory as the .gitignore file
/*

# Whitelist some files
!.gitignore
!README.md

# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log

# Whitelist folder/a/b1/ and folder/a/b2/
# trailing "https://stackoverflow.com/" is optional for folders, may match file though.
# "https://stackoverflow.com/" is NOT optional when followed by a *
!folder/
folder/*
!folder/a/
folder/a/*
!folder/a/b1/
!folder/a/b2/
!folder/a/file.txt

# Adding to the above, this also works...
!/folder/a/deeply
/folder/a/deeply/*
!/folder/a/deeply/nested
/folder/a/deeply/nested/*
!/folder/a/deeply/nested/subfolder

Der obige Code würde alle Dateien außer ignorieren .gitignore, README.md, folder/a/file.txt, folder/a/b1/ und folder/a/b2/ und alles, was in diesen letzten beiden Ordnern enthalten ist. (Und .DS_Store und *.log Dateien in diesen Ordnern werden ignoriert.)

Natürlich könnte ich zB !/folder oder !/.gitignore zu.

Mehr Info: http://git-scm.com/docs/gitignore

  • Sehr schlau, danke. Meiner Meinung nach ist dies der beste Weg, dies für WordPress-Sites mit der minimalen Anzahl von Einschlussregeln zu tun. Außerdem werden keine neuen Plugins, Designs oder WP-Updates ohne Ihre ausdrückliche Erlaubnis entfernt oder hinzugefügt. Bei der Verwendung von GitHub Desktop finde ich .DS_Store Dateien werden nicht ignoriert, aber über die Befehlszeile ist dies kein Problem. Um dies zu umgehen, musste ich die verschieben **/.DS_Store unter allen anderen Regeln.

    – Jibran

    18. Mai 2016 um 0:32 Uhr

  • Mein innerer Syntax-Highlighter reagiert seltsam auf den Titel Ihres Beitrags.

    – Itsadok

    10. Juni 2016 um 7:49 Uhr

  • Gracias! Sie können auch eine Datei in einem Ordner auf die Whitelist setzen.. !/some/folder/file.txt

    – PodTech.io

    27. Juni 2017 um 14:47 Uhr

  • @dallin es gibt keinen unterschied. Einer setzt einen Ordner auf die Whitelist und der andere die untergeordneten Elemente dieses Ordners auf die Whitelist, was dasselbe bewirkt. Das einzige Problem ist, dass das übergeordnete Element eines Ordners oder einer Datei auf die Whitelist gesetzt werden muss, bevor es auf die Whitelist gesetzt werden kann, also können Sie das nicht tun /* dann !/nested/folder/* (oder das Äquivalent !/nested/folder) ohne zu tun !/nested/ oder !/nested Erste! (und wahrscheinlich /nested/* zwischen). Ein Trick, den Sie sich merken sollten, ist, wenn Sie einen tief verschachtelten Unterordner auf die Whitelist setzen, müssen Sie die untergeordneten Elemente in jedem Unterordner ganz nach oben schwärzen, und diese Blacklists enden mit dem “Slash Star” …

    – Ryan Taylor

    6. Februar 2019 um 19:59 Uhr


  • Warum gibt es einen umgekehrten Schrägstrich bei **/.DS_Store, aber nicht bei **.log?

    – FritzDC

    19. August 2020 um 14:13 Uhr

1646886491 271 Lassen Sie gitignore alles auser ein paar Dateien ignorieren
Nik

Etwas konkreter:

Beispiel: Ignoriere alles in webroot/cache – aber behalte webroot/cache/.htaccess.

Beachten Sie den Schrägstrich (/) nach dem cache Mappe:

FEHLGESCHLAGEN

webroot/cache*
!webroot/cache/.htaccess

FUNKTIONIERT

webroot/cache/*
!webroot/cache/.htaccess

# ignore these
*
# except foo
!foo

1646886491 138 Lassen Sie gitignore alles auser ein paar Dateien ignorieren
slatunje

Um einige Dateien in einem Verzeichnis zu ignorieren, müssen Sie dies im tun korrekten Reihenfolge:

Ignoriere zum Beispiel alles im Ordner „application“ außer index.php und Ordner „config“. achten sie auf die reihenfolge.

Sie müssen zuerst wollen, was Sie wollen, negieren.

FEHLGESCHLAGEN

application/*

!application/config/*

!application/index.php

FUNKTIONIERT

!application/config/*

!application/index.php

application/*

Lassen Sie uns toolifizieren!

Wie @Joakim sagte, können Sie zum Ignorieren einer Datei Folgendes verwenden.

# Ignore everything
*

# But not these files...
!.gitignore
!someFile.txt

aber wenn sich die Datei in verschachtelten Verzeichnissen befindet, ist es etwas schwierig, diese Regeln zu schreiben.

Zum Beispiel, wenn wir alle Dateien überspringen möchten, aber nicht a.txtgelegen in aDir/anotherDir/someOtherDir/aDir/bDir/cDir. Dann unsere .gitignore wird so etwas sein

# Skip all files
*

# But not `aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt`
!aDir/
aDir/*
!aDir/anotherDir/
aDir/anotherDir/*
!aDir/anotherDir/someOtherDir/
aDir/anotherDir/someOtherDir/*
!aDir/anotherDir/someOtherDir/aDir/
aDir/anotherDir/someOtherDir/aDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/
aDir/anotherDir/someOtherDir/aDir/bDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/
aDir/anotherDir/someOtherDir/aDir/bDir/cDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

Das ist ziemlich schwer von Hand zu schreiben.

Um diese Hürde zu lösen, habe ich eine Web-App namens erstellt git-nicht-ignorieren die die Regeln für Sie generiert.

Werkzeug

Demo

Lassen Sie gitignore alles auser ein paar Dateien ignorieren

Beispieleingabe

aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

Beispielausgabe

!aDir/
aDir/*
!aDir/anotherDir/
aDir/anotherDir/*
!aDir/anotherDir/someOtherDir/
aDir/anotherDir/someOtherDir/*
!aDir/anotherDir/someOtherDir/aDir/
aDir/anotherDir/someOtherDir/aDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/
aDir/anotherDir/someOtherDir/aDir/bDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/
aDir/anotherDir/someOtherDir/aDir/bDir/cDir/*
!aDir/anotherDir/someOtherDir/aDir/bDir/cDir/a.txt

  • Gute Arbeit, tolles Werkzeug! es hat mir viel arbeit erspart.

    – Ezequiel Alanis

    22. Dezember 2021 um 21:22 Uhr

  • Aus irgendeinem Grund darf ich die Ergebnisse von dieser Seite nicht kopieren …

    – not2qubit

    5. Februar um 1:37

  • @not2qubit Seltsam. Kannst du es mit einem anderen Browser versuchen?

    – derapache64

    5. Februar um 5:29

  • Perfekt, funktioniert jetzt!

    – not2qubit

    5. Februar um 16:16 Uhr

  • das werkzeug ist genial. danke für das Teilen.

    – Seedme

    8. Februar um 1:36

986160cookie-checkLassen Sie .gitignore alles außer ein paar Dateien ignorieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy