Wenn Sie es sagen *
zu ignorieren, wird Git Rekursion nicht in einem Unterverzeichnis (auch wenn Sie ein „unignore“ Muster haben, die etwas innerhalb eines der Verzeichnisse entsprechen könnte).
Es gibt ein wenig von der gitignore Mustersprache, die jedoch helfen könnte. Ein abschließender Schrägstrich zwingt das Muster, nur auf Verzeichnisse anzuwenden. Also, sollten Sie in der Lage sein, dies zu verwenden:
# .gitignore
*
!.keep
!*/
In der Demonstration unter ich die oben .gitignore
und haben eine zusätzliche Datei (mit dem Namen do-not-keep
) neben jeder .keep
Datei verwenden. Sie können sehen, dass es für mehrere Ebenen von Unterverzeichnissen funktioniert und die anderen Dateien nicht anzeigt. Sie müssen dafür sorgen, dass jedes Verzeichnis über eine unabhängige Methode seine eigene .keep
(oder was auch immer) hat.
% git status --short -uall
?? a/.keep
?? a/b/.keep
?? a/b/c/.keep
?? a/b/c/d/.keep
?? e/.keep
?? e/f/.keep
?? e/f/g/.keep
?? h/.keep
?? h/i/.keep
?? j/.keep
Dies wurde mit Git 1.7.3.1 gemacht, aber ich erwarte, dass es auch für andere Versionen funktioniert.
Die Demonstration Setup:
% git init
% mkdir -p a/b/c/d e/f/g h/i j
% zargs -i.. -- **/*(/) -- touch ../.keep ../do-not-keep
% tree -aI .git .
.
|-- .gitignore
|-- a
| |-- .keep
| |-- b
| | |-- .keep
| | |-- c
| | | |-- .keep
| | | |-- d
| | | | |-- .keep
| | | | `-- do-not-keep
| | | `-- do-not-keep
| | `-- do-not-keep
| `-- do-not-keep
|-- e
| |-- .keep
| |-- do-not-keep
| `-- f
| |-- .keep
| |-- do-not-keep
| `-- g
| |-- .keep
| `-- do-not-keep
|-- h
| |-- .keep
| |-- do-not-keep
| `-- i
| |-- .keep
| `-- do-not-keep
`-- j
|-- .keep
`-- do-not-keep
10 directories, 21 files
Sie nicht auch haben müssen '.gitignore' im Unterverzeichnis eigene' .gitignore' Datei aufgeführt, um für die ignorieren Datei selbst durch verfolgt werden Git? – beporter
@beporter: Ich würde es normalerweise nur manuell mit 'git add -f .gitignore' verfolgen (wenn es verfolgt wird, ist es egal, ob es ignoriert worden wäre oder nicht). Aber, wenn Sie diesen einmaligen "Kraft" -Schritt nicht nehmen wollten, dann könnten Sie diesen zusätzlichen Eintrag hinzufügen (oder, besser, '! /. Gitignore', um nur den' .gitignore' auf der ersten Ebene zu entfernen). –