2010-10-06 15 views
6

Così Diciamo che ho una struttura di directory in questo modoCome posso scrivere una regola in gitignore per ignorare tutti i file tranne le directory in qualche directory?

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

vorrei qualsiasi directory e sotto directory di upload di essere monitorati, ma non tutti i file in essa con l'eccezione di un file fittizio perché git non lo fa rintracciare le directory.

Penso che qualcosa del genere funzionerebbe ma non funziona.

* 
!.gitignore 

risposta

7

quando gli si dice di ignorare *, Git non ricorsivamente in qualsiasi sottodirectory (anche se si dispone di un modello di “non ignorare più” che potrebbe corrispondere a qualcosa all'interno una delle directory).

C'è un po 'del linguaggio pattern gitignore che potrebbe essere di aiuto. Una barra finale impone che il modello si applichi solo alle directory. Quindi, si dovrebbe essere in grado di utilizzare questo:

# .gitignore 
* 
!.keep 
!*/ 

Nella dimostrazione di sotto utilizzare quanto sopra .gitignore ed avere un file aggiuntivo (denominato do-not-keep) accanto a ciascun file .keep. Puoi vedere che funziona per più livelli di sottodirectory e non mostra gli altri file. Dovrai disporre che ogni directory abbia il proprio .keep (o altro) tramite un metodo indipendente.

% 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 

Questo è stato fatto con Git 1.7.3.1, ma mi aspetto che funzioni anche per altre versioni.

Il setup dimostrazione!

% 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

Non è inoltre necessario disporre di '.gitignore' elencati nel file .gitignore'' del sub-dir in modo che il file di ignorare stesso per essere seguito da idiota? – beporter

+0

@beporter: di solito lo tracciavo manualmente con 'git add -f .gitignore' (quando è tracciato, non importa se sarebbe stato ignorato o meno). Ma, se non volessi fare il passo "forza" per una sola volta, allora potresti aggiungere quella voce extra (o, forse meglio, '! /. Gitignore' per non riconoscere il' .gitignore' di primo livello). –

Problemi correlati