Unterschied zwischen ** und * beim Glob-Matching (.gitignore)

Lesezeit: 3 Minuten

Benutzer-Avatar
Emil Iwanow

Ich habe die folgende Verzeichnisstruktur und Dateien.

pw-spec/
|-- event_spec.coffee
|-- event_spec.js
|-- integration
|   `-- service
|       |-- auth_spec.coffee
|       |-- auth_spec.js
|       |-- chat_spec.coffee
|       |-- chat_spec.js
|       |-- transport_spec.coffee
|       `-- transport_spec.js
|-- message_spec.coffee
|-- message_spec.js
|-- pw_spec.coffee
|-- pw_spec.js
|-- run.coffee
|-- run.html
|-- run.js
|-- service
|   |-- auth_spec.coffee
|   |-- auth_spec.js
|   |-- chat_spec.coffee
|   |-- chat_spec.js
|   |-- stream_spec.coffee
|   `-- stream_spec.js
|-- spec.coffee
|-- spec.js
`-- stub
    |-- stream.coffee
    |-- stream.js
    |-- transport.coffee
    `-- transport.js

4 directories, 27 files

Ich möchte alle ignorieren *.js Dateien irgendwo innerhalb pw-spec Verzeichnis.

Fügen Sie jedoch die folgenden Muster hinzu .gitignore schneidet nicht ab:

pw-spec/*.js
pw-spec/**/*.js

Das Problem ist, dass der zweite nur mit js-Dateien übereinstimmt, die sich genau 1 Ebene tief im Baum befinden, während ich alle darunter liegenden js-Dateien abgleichen möchte pw-spec.

Tun

ls pw-spec/**/*.js

produziert [1]:

pw-spec/service/auth_spec.js
pw-spec/service/chat_spec.js
pw-spec/service/stream_spec.js
pw-spec/stub/stream.js
pw-spec/stub/transport.js

Wie du sehen kannst

pw-spec/integration/service/auth_spec.js
pw-spec/integration/service/chat_spec.js
pw-spec/integration/service/transport_spec.js

fehlen bei [1].

  • Lesen Sie stackoverflow.com/a/1470664/6309

    – VonC

    12. Januar 2012 um 9:35 Uhr

Es gibt zwei Ansätze für diese Art von Situation, je nach Ihren Bedürfnissen.

Eine Lösung ist zu setzen

# generated files
*.js

in pw-spec/.gitignore.

Die zweite Lösung lautet:

/pw-spec/*.js
/pw-spec/*/*.js
/pw-spec/*/*/*.js

usw. in der .gitignore-Hauptdatei. Dieser Ansatz ist spröde, wenn weitere Unterverzeichnisse hinzugefügt werden.

Ich ziehe es im Allgemeinen vor, die .gitignore-Datei auf der gleichen Ebene wie das Makefile abzulegen, das die Dateien generiert, die ich ignoriere.

  • Diese Lösung funktioniert immer noch, aber ab 2013 können Sie genau das tun, was das OP versucht hat: pw-spec/**/*.js. Siehe diese Antwort.

    – Isaak

    11. Oktober 2016 um 16:51 Uhr

Benutzer-Avatar
Mischa Arefiev

Der Unterschied ist das ** funktioniert nicht, zumindest nicht für alle. Sehen

Warum funktioniert gitignore in diesem Fall nicht?

Sie können eine separate haben .gitignore in pw-spec/

Benutzer-Avatar
fge

Ein … kreieren .gitignore in pw-spec in dem Sie diese beiden Zeilen einfügen:

*.js
*/*.js

Beachten Sie auch, dass Sie, wenn Sie bereits Dateien in diesem Unterverzeichnis verfolgt haben, die Sie “unverfolgt” haben möchten, diese dem Index als solche unbekannt machen müssen:

git rm --cached path/to/file

Zum Beispiel, wenn im Verzeichnis pw-spec du kannst tun:

find -type f -name "*.js" | xargs git rm --cached

  • Ich habe hinzugefügt .gitignore in pw-spec. Jedoch, *.js stimmt nur mit direkten Nachkommen von überein pw-specund stimmt nicht überein .js Dateien in Unterverzeichnissen.

    – Emil Iwanow

    12. Januar 2012 um 9:39 Uhr

  • Ja, ich habe mit gemischt .git/info/exclude… Festhalten

    – fg

    12. Januar 2012 um 9:42 Uhr

  • Hm, das löst es. Ich habe die .gitignore Datei im Elternteil von pw-spec weil es ein anderes Verzeichnis mit ähnlichen Anforderungen gibt (ich habe es der Kürze halber weggelassen). Wenn ich keine Lösung finde, verwende ich einfach 2 .gitignore Dateien.

    – Emil Iwanow

    12. Januar 2012 um 9:53 Uhr

  • Versuchen Sie vielleicht eine einzelne .gitignore-Datei im Stammverzeichnis mit „x/*.js“ und „x/*/*.js“ für ein Verzeichnis „x“? (Hinweis: ungetestet)

    – fg

    12. Januar 2012 um 10:02 Uhr

  • das war mein erster versuch und es hat nicht geklappt. Es stimmt nicht mehr als 1 Ebene tief überein (Ereignis mit **).

    – Emil Iwanow

    12. Januar 2012 um 10:12 Uhr

1185800cookie-checkUnterschied zwischen ** und * beim Glob-Matching (.gitignore)

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

Privacy policy