2011-12-26 2 views
25

Ho un progetto multi-moduli di Maven che ha una profondità di circa 5 livelli.
Ora mi sto muovendo per git e vedo che gran parte del contenuto della cartella target viene catturata da git come "Modifiche non applicate".
Ho cercato su Google molto ma ho cercato ma non ho trovato una risposta su come ottenere git per ignorare l'albero di directory intero della cartella target.
mio .gitignore, che risiede alla base del progetto, si presenta così:Problema con la sottodirectory ignora in git

.project 
.classpath 
.settings/ 
target/ 

La cosa strana è che i file .class, che risiedono da qualche parte sotto l'albero target, fatevi ignorato dalle definizioni di cui sopra, ma file come MANIFEST.MF, pom.properties oi miei propri file delle proprietà dell'applicazione che si trovano da qualche parte nell'albero di directory target non vengono ignorati.
Ho letto Git Ignores and Maven targets ma quella soluzione non sembra funzionare per me.
Posso anche dire che quando provo ad aggiungere la regola target/* non cambia nulla e quando sostituisco target/ con il target/* allora i file .class appaiono come non bloccati.
Apprezzerei molto una guida poiché mi sembra molto improbabile che le orde di persone che usano git e maven non abbiano già risolto problemi simili. Grazie.

+0

È stato eseguito il commit di questi file nella directory 'target /' nel repository in precedenza? L'aggiunta di file a ".gitignore" non ha alcun effetto se il file è già tracciato da git. –

+0

@ KL-7 Il mio partner ha effettuato il commit iniziale, ma in realtà sembra che potrebbe essere il problema. Controllerò e riferirò. Se è così puoi postarlo come risposta e accetterò. – Ittai

risposta

49

Uno dei motivi potrebbe essere che i file sono già stati trasferiti nel repository. In tal caso, aggiungerli a .gitignore non impedisce a git di tenere traccia di questi file. Per risolvere che si dovrebbe prima rimuoverli dal repository così:

git rm -r target/ 

(Se il progetto ha moduli, è necessario includere il percorso fino alla destinazione del relativo modulo:
git rm -r parent_project/module_name/target/)

Se desidera rimuovere directory dal repository, ma non dal disco è possibile utilizzare l'opzione --cached:

git rm -r --cached target/ 

In ogni caso si dovrebbe quindi impegnarsi che l'eliminazione al repository (si può farlo nello stesso commit con l'aggiunta di target/ a .gitignore se lo si desidera).

+0

Ci scusiamo per il noob ma quando eseguo 'git rm -r --cached target /' viene eliminato solo nel mio repository locale? Se è così, poi ho bisogno di spingere il repository locale al mio repository remoto, giusto? – Ittai

+0

Sì, per prima cosa è necessario eseguire il commit delle modifiche e quindi passare al repository remoto. –

+0

Non ho dimenticato. Sto riscontrando qualche problema con questo problema, ma penso che sia collegato più alla mia attuale inesperienza con git che alla tua soluzione. Pubblicherò/accetto la tua risposta una volta che posso. Grazie. – Ittai

4
target 
target/* 

aggiungere queste righe nel gitignore di ignorare il file di destinazione e tutti i file all'interno di destinazione. Questo non dovrebbe più tracciare quella cartella e il suo contenuto.

2

In alternativa, utilizzando tortoisegit sulla destinazione della cartella, scegliere semplicemente "Elimina e aggiungi all'elenco di ignorazioni".