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
fonte
2010-10-06 23:16:25
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
@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). –