Ist es möglich, .gitignore-Regeln im Unterverzeichnis zu ignorieren?

82

Ich möchte alle Gitignore-Regeln im Unterverzeichnis außer den Gitignore-Regeln im Stammverzeichnis ignorieren.

zum Beispiel) Ich habe bereits eine .gitignoreDatei in einer Verzeichnisstruktur /a.

Und auch .gitignoreDatei in /a/b. Angenommen, Sie /ahaben a.txt b.txtDateien.

/a/bhat .configDatei. .gitignoredefiniert .configin /a/b.

.configDatei wird von .gitignorein ignoriert /a/b.

Aber ich möchte die .configDatei wirklich verfolgen , indem ich die Regeln .gitignoreim Unterverzeichnis ignoriere .

Ist es möglich?

Danke im Voraus

Jeon
quelle

Antworten:

134

Ihre Frage ist nicht allzu klar, aber wenn es einige Unterverzeichnisse gibt, in denen Sie andere Gitignore-Regeln wünschen, können Sie einfach einen neuen Gitignore in diesem Verzeichnis erstellen.

Angenommen, Sie haben:

Projekt / .gitignore
project / stuff / .gitignore

Der .gitignore in stuff / überschreibt den .gitignore im Stammverzeichnis.

git help gitignoreoder man gitignorehat einiges mehr Informationen darüber, was möglich ist.

signine
quelle
2
Ich denke , die OP zu fragen, wenn Sie eine Verzeichnisstruktur /a/b/cund aktualisieren Sie , .gitignorein /a/b, ist es möglich , in /a/b/cden Regeln zu ignorieren /a/bund stattdessen nur verwenden , um Regeln aus /a.
Michael Mior
45
Ja, wenn das die Frage war, ist es möglich, Regeln in einem Gitignore weiter unten in der Kette zu negieren. "An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again."
Unterschreiben Sie
3
@signine Funktioniert nicht mit Verzeichnissen. Siehe meine Antwort .
Ross Patterson
2
Ich denke, es ist genauer zu sagen: Der inner .gitignoreWille verschmilzt outer .gitignoremit höherer Priorität und überschreibt nicht einfach.
Eric Wang
@eric wang offenbar nicht ein Unterverzeichnis nicht fusionieren, sondern überschreibt: git-scm.com/docs/gitignore
Topspin
39

Nehmen wir an, Sie möchten node_modulesin Ihr Repository aufnehmen, aber einige Module auf der ganzen Linie haben .gitignoreihre eigenen. Sie können die Regeln negieren, indem Sie Ihrer Stammdatei Folgendes hinzufügen .gitignore:

# Make sure to include everything in node_modules.
!node_modules/**
Nick Zalutskiy
quelle
3
Gibt es eine allgemeinere Möglichkeit, dies zu tun? können sagen , ich habe node_modules/mod1, node_modules/mod2innerhalb der beiden ein .gitignore sind , die die tiefer ignoriert node_modulesinnerhalb diejenigen (wie in node_modules/mod1/node_modules. I Hinzufügen und Entfernen von Modulen oft so kann ich nicht sehr gut kennen und manuell Regeln hinzufügen , ignorieren node_modules/mod1/.gitignoreoder manuell hinzufügen die !node_modules/mod1/node_modulesganze Zeit. Grundsätzlich versuche ich, eine Meteor-App .gitignores
bereitzustellen,
10

Der Schlüssel zum Problem hierbei ist, dass ein übergeordnetes Verzeichnis ausgeschlossen ist. Von $ man gitignore:

Es ist nicht möglich, eine Datei erneut einzuschließen, wenn ein übergeordnetes Verzeichnis dieser Datei ausgeschlossen ist. Git listet aus Leistungsgründen keine ausgeschlossenen Verzeichnisse auf, daher haben alle Muster in enthaltenen Dateien keine Auswirkung, unabhängig davon, wo sie definiert sind.

So habe ich es zum Laufen gebracht. Gegeben:

/a/...
/b/foo
/c/...

/.gitignore::

/*
!/b

Dann /b/foowerden alle Dateien als eingeschlossene Dateien angezeigt /aund /causgeschlossen. Der Nachteil ist, dass Sie für alle übergeordneten Elemente eines Verzeichnisses, in das Sie Dateien aufnehmen möchten, eine Negation hinzufügen müssen.

Ross Patterson
quelle
Warum nicht verwenden !/b/**/*?
Alexis Tyler
Ich kann nicht ohne weitere Erklärung von Ihnen antworten.
Ross Patterson
6

Soweit ich weiß, gibt es keine Möglichkeit, dies zu tun. Da der lokale .gitignore den Root-Ginignore überschreibt, wird meine Problemumgehung manuell hinzugefügt.

git add --force [ your file and folder]
helloiloveit
quelle
child .gitignorehat bei mir nicht funktioniert, da das übergeordnete Element alle Einstellungen für untergeordnete Ordner überschreibt. Wenn Sie das Hinzufügen erzwingen, werden git add -f myfile.txtÄnderungen unter Umgehung der übergeordneten .gitignoreEinstellungen nachverfolgt.
SliverNinja - MSFT