A meno che un repository comprendesse diversi progetti indipendenti, sembra che sarebbe più semplice avere un file .gitignore
nella directory principale del repository rispetto a vari in tutto. Esiste una best practice standard su questa o alcune analisi online quando un approccio è migliore dell'altro?Più ".gitignore`s è corrugato?
risposta
Mi vengono in mente almeno due situazioni in cui si vorrebbe avere più file .gitignore
in diverse directory (sotto).
Diverse directory hanno diversi tipi di file da ignorare. Ad esempio, lo
.gitignore
nella directory superiore del progetto ignora i programmi generati, mentreDocumentation/.gitignore
ignora la documentazione generata.Ignora i file dati solo in una determinata directory (secondaria) (è possibile utilizzare
/sub/foo
in.gitignore
, tuttavia).
Si ricorda che i modelli in .gitignore
di file si applicano in modo ricorsivo per la (sub) directory del file è in e tutte le sue sottodirectory, a meno che modello contiene '/' (così ad esempio, modello name
vale per qualsiasi file chiamato name
in data directory e tutte le sue sottodirectory, mentre /name
è più adatto a file con questo nome solo nella directory specificata).
È possibile avere più .gitignore
, ognuno naturalmente nella propria directory.
Per verificare quale regola del gitignore è responsabile dell'ignorare un file, utilizzare git check-ignore
: git check-ignore -v -- afile
.
E si può avere una versione diversa di un file .gitignore
per ramo: ho già visto questo tipo di configurazione per garantire che un ramo ignori un file mentre l'altro ramo non lo fa: vedere questo question for instance.
Se il repository include diversi progetti indipendenti, sarebbe meglio farne riferimento come sottomoduli.
Queste sarebbero le migliori pratiche effettive, consentendo a ciascuno di questi progetti di essere clonati in modo indipendente (con i rispettivi file .gitignore
), pur facendo riferimento a una revisione specifica in un progetto padre globale.
Vedere true nature of submodules per ulteriori informazioni.
Si noti che, dal momento che Git 1.8.2 (marzo 2013) si può fare un git check-ignore -v -- yourfile
al fine di vedere quale gitignore gestito (da cui .gitignore
file) viene applicata al 'yourfile
', e comprendere meglio il motivo per cui il file ha detto è ignorato
Vedere "which gitignore
rule is ignoring my file?"
Sono l'unico che pensa che la prima frase sia divertente? (Perché più file con lo stesso nome non possono essere nella stessa directory.) – TTT
@TTT Sono d'accordo. Ho modificato la prima frase. Fammi sapere se sembra migliore. – VonC
Molto meglio. : D E eccellente aggiunta di check-ignore! – TTT
Come nota tangenziale, un caso in cui la possibilità di avere più file .gitignore
è molto utile se si desidera una directory aggiuntiva nella propria copia di lavoro che non si intende mai eseguire il commit. Basta mettere un 1 byte .gitignore
(che contiene solo un singolo asterisco) in quella directory e non potrà mai presentarsi in git status
ecc
puoi anche usare ". git/info/exclude "file per quello – Ayell
Certo, se non ti dispiace la fugacità di dover aprire un file in una posizione fuori dalla radice del repository, quindi scriverci un intero percorso e poi ricordarsi di ripulire il file voce se/quando si elimina la directory. Confrontalo con 'printf \ *> .gitignore' (la pulizia è automatica quando cancelli la directory). Sono certo che ci sono situazioni in cui '.git/info/exclude 'è la scelta più appropriata, ma non molte. –
Sì, quando si desidera escludere un file anziché una cartella, ad esempio: p – Ayell
Pro singolo
Facile da trovare.
Le regole di esclusione delle operazioni di ricerca possono essere piuttosto difficili se ho più gitignore, a diversi livelli nel repository.
Con più file, in genere si finisce con un bel po 'di duplicazione.
Pro multipla
Scopes "conoscenza" per la parte dell'albero del file dove è necessario.
Poiché Git traccia solo i file, un .gitignore vuoto è l'unico modo per eseguire il commit di una directory "vuota".
(E prima Git 1.8, l'unico modo per escludere un modello come
my/**.example
era quello di crearemy/.gitignore
con il modello**.foo
. Questa ragione non si applica ora, come si può fare/my/**/*.example
.)
Preferisco di gran lunga un singolo file, dove posso trovare tutte le esclusioni. Non mi sono mai perso per-directory .svn, e non perderò neanche per-directory .gitignore.
Detto questo, più gitignores sono abbastanza comuni. Se li usi, almeno è coerente nel loro uso per renderli ragionevoli con cui lavorare. Ad esempio, puoi metterli nelle directory solo a un livello dalla radice.
"un .gitignore vuoto è l'unico modo per commettere una directory" vuota "." In realtà trovo che caricare un singolo file README (o un file chiamato 'empty') sia più comune. –
.gitkeep è un bel modo per farlo anche ... solo un'altra convenzione. Mi piace l'idea di usare un file readme, perché in quel caso potresti spiegare per cosa è usata la directory, nel file mi legge. –
Ci sono molti scenari in cui si desidera impegnarsi in una directory a vostra repo Git, ma senza i file in essa contenuti, ad esempio le logs
, cache
, uploads
directory ecc
Quindi quello che faccio sempre è quello di aggiungere un .gitignore
file in quelle directory con il seguente contenuto:
*
!.gitignore
con questo file .gitignore
, Git non si tenere traccia di tutti i file in queste directory ma ancora mi permetterà di aggiungere il file .gitignore
e quindi la directory stessa a t lui repo.
- 1. Aggiungi .gitignore a gitignore
- 2. In Perl, qual è la differenza tra s/^ \ s + // e s/\ s + $ //?
- 3. Qual è l'equivalente di Ruby di Python `s =" ciao,% s. Dove è% s? " % ("John", "Maria") `
- 4. più fastidioso parse C++ 's nuovo
- 5. Qual è la differenza tra char * s [] e char (* s) []?
- 6. Angular2 .gitignore
- 7. cmd dir/b/s più data
- 8. In S s = S() è garantito che non verrà creato alcun temporaneo?
- 9. Sintassi di gitignore confusa
- 10. Procedura consigliata per l'utilizzo di più file .gitignore
- 11. .gitignore style fnmatch()
- 12. Diversi `with`s in` try`s
- 13. Quale modello segue .gitignore?
- 14. TFS 2012 .gitignore .hgignore equivalent
- 15. Git: ignorare inverso (.gitignore)
- 16. gitignore non funziona
- 17. Come configurare gitignore?
- 18. Perché dovrei usare gitignore?
- 19. Suggerimenti per Grails .gitignore
- 20. Dart: default gitignore?
- 21. .gitignore alternativa in Perforce
- 22. .gitignore un contenuto cartella
- 23. Cos'è esattamente .gitignore?
- 24. Come gitignore * solo * file?
- 25. GWT .hgignore/.gitignore voci
- 26. Determinare se O/S è Windows 7
- 27. Sprintf (buffer, "% s [...]", buffer, [...]) è sicuro?
- 28. decimale (s, p) o numero (s, p)?
- 29. rotaie s o rotaie exec fascio s
- 30. Regex PHP: Differenza tra \ s e \\ s
Ah, per qualche ragione pensavo che/Documentation/*.html avrebbe coperto tutto ciò, ma immagino che * la wild card corrisponderà solo alle directory a un livello. –
@ConleyOwens: con Git moderno puoi usare 'Documentation/**/*. Html' (nota che ogni barra ancorata al pattern;'/foo' è usata per ancorare il file direttamente nella directory) –