2010-10-06 4 views
6

können also sagen, dass ich eine Verzeichnisstruktur haben wie soWie kann ich eine Regel in Gitignore schreiben, um alle Dateien außer Verzeichnisse in einem Verzeichnis zu ignorieren?

uploads/ 
--dir1/ 
----one.txt 
----two.txt 
----dir2/ 
------one.txt 
------two.txt 

ich alle Verzeichnisse und Unterverzeichnisse von Uploads möchten mit Ausnahme einer Dummy-Datei in es verfolgt, aber nicht alle Dateien, weil git nicht der Fall ist Track-Verzeichnisse.

Ich würde denken, dass so etwas funktionieren würde, aber es nicht funktioniert.

* 
!.gitignore 

Antwort

7

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 
+0

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

+0

@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). –

Verwandte Themen