2009-06-13 13 views
81

Chiunque sa se è possibile ignorare tutte le istanze di una particolare directory in una struttura di file gestita da git.Obiettivi Ignora e Maven Git

Sto cercando di escludere tutte le cartelle "di destinazione" in un progetto maven con un numero di sottomoduli. So che posso escludere esplicitamente ognuno di essi in un livello superiore .gitignore, ma mi piacerebbe davvero essere in grado di specificare un modello come **/target/* per far sì che ignori automaticamente l'istanza nelle sottodirectory?

È possibile?

+0

Con quale configurazione stai facendo questo lavoro? * /. settings/* ignorerebbe solo 'xxx/.settings/*', non '.settings/*' o 'xxx/yyy/.settings/*': i pattern di ignoranza non sembrano essere applicati in modo ricorsivo. Vedi anche http://stackoverflow.com/questions/971465/git-ignore-certain-files-contained-in-specific-folders. – VonC

risposta

67

È possibile utilizzare i modelli in un file .gitignore. Vedi lo gitignore man page. Il modello */target/* dovrebbe ignorare qualsiasi directory denominata destinazione e qualsiasi cosa sotto di essa. Oppure puoi provare */target/** per ignorare tutto sotto target.

+4

Grazie! Qui per chiunque altro, è contenuto per un .gitignore per saltare i sospetti di ususiva ed eclissi. target/* * /target/* .metadata * tar.gz .classpath .project * /. Impostazioni/* – sgargan

+2

Con quale configurazione si stanno facendo questo lavoro? * /. settings/* ignorerebbe solo 'xxx/.settings/*', non '.settings/*' o 'xxx/yyy/.settings/*': i pattern di ignoranza non sembrano essere applicati in modo ricorsivo. Vedi anche http://stackoverflow.com/questions/971465/git-ignore-certain-files-contained-in-specific-folders. – VonC

+4

Per i progetti multi-modulo potresti voler usare _ **/target/_, ma fai attenzione a non escludere le directory "target" legittime nelle fonti – Bogdan

193

Il file .gitignore nella directory radice fa si applica a tutte le sottodirectory. Il mio è il seguente:

.classpath 
.project 
.settings/ 
target/ 

Questo è in un progetto Maven multi-modulo. Tutti i sottomoduli vengono importati come singoli progetti di eclissi utilizzando m2eclipse. Non ho altri file .gitignore. Infatti, se si guarda negli gitignore man page:

Patterns letti da un .gitignore file di nella stessa directory come il percorso, o in qualsiasi directory genitore ...

Quindi questo dovrebbe funzionare per tu.

+5

Questa è una risposta migliore di "*/target/*". Esclude una directory ovunque si trovi nell'albero delle directory, ma non funzionerebbe per i file (vedi http://stackoverflow.com/questions/971465/git-ignore-certain-files-contained-in-specific-folders) – VonC

+0

(+1 tra l'altro) – VonC

+2

se continui a leggere dice "Questi pattern corrispondono alla posizione del file .gitignore". La tua risposta è sbagliata ... – user1387219

1

Come già sottolineato nei commenti da Abhijeet si può semplicemente aggiungere linea come:

/target/** 

al escludere file nella cartella di \.git\info\.

Quindi, se si desidera eliminare la cartella target nel repository remoto, sarà necessario prima eliminare manualmente questa cartella dal repository locale, eseguire il commit e quindi spingerlo. Questo perché git ti mostrerà il contenuto di una cartella di destinazione come inizialmente modificato.