2009-10-31 25 views
41

Il progetto utilizza Maven in modo che i file POM siano le principali fonti di informazioni sul progetto. Ci sono alcune impostazioni utili nei file di progetto che sarebbe bello conservare.Best practice per IntelliJ IDEA 9 + Maven + Controllo versione

OTOH IDEA sembra creare troppe modifiche ridondanti nella struttura del file di progetto che inquina la cronologia SVN e talvolta crea conflitti.

Devo mantenere la directory .idea ei file * .iml sotto controllo versione? in toto? in parte?

Aggiornamento: Quindi la migliore pratica che ho trovato a lavorare per me e la mia squadra è finora:

  1. Check in tutti i file di IDEA, * .iml e .idea directory. Contengono informazioni preziose ed è una perdita di tempo per ricrearlo ogni volta che si aggiorna.
  2. Creare ramo privato per ogni sviluppatore
  3. cd nella directory .idea
  4. svn passare al suo ramo controparte privata
  5. Non check-in file idea su commit regolari - inquinano storia. Controllali in speciali commit.

In questo modo, si mantiene il contenuto della directory .idea nel controllo della versione ma si tiene fuori dalla modalità di commit regolari. Qualsiasi sviluppatore può avere accesso alle directory IDEA di qualcun altro.

Aggiornamento 2: Dal momento che questa domanda è stato scritto, ho cambiato la mia pratica di non il check-in qualsiasi file IntelliJ nel controllo di versione, come consigliato da molti soccorritori. Questa è la mia pratica corrente sia per Maven che per Gradle. Gli strumenti si sono sviluppati al punto che le informazioni critiche possono sempre essere riprodotte dai file originali .POM o .gradle. Quando i file cambiano, l'IDE tiene traccia delle modifiche in modo affidabile in modo da non perdere i file IDE che spesso quindi non c'è bisogno di controllare loro in

Aggiornamento 3:. 7 anni dopo aver chiesto questa domanda sembra essere ancora rilevante. Le stesse migliori pratiche si applicano anche a Gradle (probabilmente anche SBT): non controllare i file IDE, ricrearli se necessario dai file POM, .gradle o SBT di base.

+1

Grazie a tutti per i vostri suggerimenti. Nel frattempo, la mia migliore pratica è quella di controllare i file IDEA ma come un changeset separato in modo da non rovinare la storia SVN. Di solito attribuisco a questi changeset il nome "follia IDEA" :-) –

+1

vedere http://stackoverflow.com/questions/3041154/intellij-idea-9-10-what-folders-to-check-into-or-not- check-in-source-contro -> Domande frequenti IDEA: http://devnet.jetbrains.com/docs/DOC-1186 –

+0

@MatthewCornell forse aggiorna il tuo commento per rispondere? –

risposta

17

Risposta breve: non mettere questi file nel repository di controllo del codice sorgente in quanto è possibile "generarli" (e questo è ancora più vero se non ne hai bisogno, se sono fastidiosi, se possono rompere gli altri ambiente).

io personalmente uso i seguenti valori per svn:ignore:

target 
*~ 
*.log 
.classpath 
.project 
*.ipr 
*.iws 
*.iml 
.settings 
+5

Questa risposta ignora il valore di avere i file iml subito dopo il check out/l'aggiornamento. Ho visto un sacco di tempo perso dagli sviluppatori, che dovevano capire, che hanno bisogno di rigenerare iml dopo l'aggiornamento. Metterli nel VC è davvero gentile con gli altri. Seguendo ciecamente la regola generale "non commettere roba generata" fa solo danno qui. –

+3

A meno che non sia qui di base, molte delle impostazioni nella directory .idea non possono semplicemente essere rigenerate. Stiamo parlando di come un progetto è suddiviso in moduli, quali moduli hanno quali faccette collegate, quali elementi devono essere generati, qual è il processo di compilazione, ecc. Questa è l'informazione chiave. Ora, se è possibile generare tutte queste informazioni da altri file, quindi prendere in considerazione l'idea di percorrere quella strada, ma per la domanda qui, non la vedo. –

+1

Questo non è valido per i grandi progetti che coinvolgono molte persone. Nel nostro caso, ad esempio, memorizziamo anche le ispezioni che l'idea esegue e lo stile del formato del codice. – Mikel

15

Una delle grandi cose di Maven è che esiste il supporto strumento per trasformare un POM in un progetto originario in Eclipse, Idea e Netbeans. Se hai un pom, puoi creare un progetto nativo abbastanza velocemente.

Per tale motivo, non avrei controllato i file .idea o * .iml sotto il controllo del codice sorgente più di quanto avrei controllato negli stub RMI o nei file di classe.

+2

+1 per menzionare i vantaggi quando si usano più IDE in una squadra –

9

Vedo che la risposta standard è "non controllare nel file di progetto, solo il .pom". Ma cose come i file .ipr contengono molte impostazioni utili che NON possono essere derivate dal file .pom.Cosa succede se i colleghi utenti di IntelliJ vogliono condividere queste impostazioni? So che i file .ipr sono progettati per essere versionati (vedi this thread per esempio). Vorrei avere una risposta vera, ma non ho ancora trovato una buona pratica in materia.

+1

Sto usando il layout della directory .idea che dovrebbe essere più VC-friendly.C'è ancora un sacco di cambiamenti ogni volta che inquina la cronologia VC se non si presta attenzione. Una possibilità che voglio provare è mettere .idea sotto svn: ignorarlo ma controllarlo manualmente su richiesta di volta in volta. Lo stesso vale per i file .classpath e .project di Eclipse. –

+0

Questa sembra più una domanda che una risposta. Penso che questo appartenga come commento ad un'altra risposta. (Scusate, so che questo mi rende un po 'simile alla "Polizia procedurale di overflow dello stack" ma il sistema funziona molto bene se le persone usano il sistema correttamente. Quindi votate la risposta che pensate sia sbagliata e votate quelli che vi piacciono. Penso che Alexei abbia risposto a questa domanda più degli altri, quindi ho votato lui e gli altri.) –

14

Penso che dovresti mettere la directory .idea nel controllo di versione. La maggior parte della configurazione contenuta dovrebbe essere monitorata per la versione, ad es. configurazioni del compilatore.

L'unico file che non appartiene al controllo di versione è .idea/workspace.xml, perché contiene solo configurazioni specifiche per l'ambiente locale.

IntelliJ Idea mette effettivamente workspace.xml nell'elenco di ignora per impostazione predefinita, quindi se si utilizza Idea per il check-in, si dovrebbe essere tutto impostato senza modificare nulla.

+0

Questa era la ragione della domanda originale: .idea è quello che uso (no workspace.xml ovviamente) e genera cambiamenti in ogni momento. Questi cambiamenti rovinano la storia e mi fanno fare troppo con loro. Come posso ridurre questi cambiamenti? –

+0

Ho usato questo approccio per alcuni giorni e non ho notato cambiamenti indesiderati in quell'area. Avete esempi di ciò che chiamate cambiamenti ridondanti che inquinano la cronologia SVN, che sono nella directory .idea ma al di fuori di workspace.xml? –

+0

Alexei, ecco un esempio di controllo ridondante. Non sono state apportate modifiche al progetto. http://ow.ly/d/1g7 –

3

La mia opinione è che dovremmo tenere tutti i file specifici IDE fuori dal controllo versione. L'idea è che dovremmo mantenere quante più informazioni possibili in forma indipendente IDE come i file Maven Pom e così via. Tutte le impostazioni critiche del progetto possono essere mantenute lì. E avendo tutte le principali impostazioni del progetto mantenute nel file pom, non vedo alcun motivo serio per controllare non solo la configurazione del progetto IDEA ma qualsiasi altra configurazione specifica IDE. Inoltre, la configurazione del progetto in stile cartella .idea in realtà inquina i registri di changeset. E vogliamo ancora mantenere le impostazioni del progetto IDEA nel controllo della versione, possiamo almeno memorizzarle in un unico formato di file .ipr.

+0

Se un obiettivo è quello di aiutare un team di sviluppo a utilizzare una configurazione IDE condivisa, la maggior parte dei file .idea nel controllo del codice sorgente è un'idea geniale. Vedo che alexi.vidmich lo capisce nella sua risposta. –

+0

Posso parzialmente concordare con questo, ma è corretto solo per la configurazione che non coinvolge dettagli di sistema sottostanti come percorsi assoluti, ambienti di runtime, ecc. –

1

Sono in ritardo per questa festa, ma questo problema esatto mi ha tormentato. E mi sono ispirato a quello che credo possa funzionare, almeno con il nostro sistema di controllo del codice sorgente.

I file IntelliJ non devono essere archiviati "insieme" con l'autorevole pom.xml e la fonte. La cronologia del controllo della versione non è "inquinata" se quelle modifiche non relative alla sorgente sono registrate in una posizione diversa nell'albero dei sorgenti.

Quindi proverò a spostare i file IntelliJ in una posizione parallela nel sistema di controllo versione, utilizzare un semplice mapping di file/directory per riunire i file di origine e di progetto sul computer dello sviluppatore e monitorare le modifiche nel sistema di controllo della versione che sono puramente ai file che influenzano la compilazione.

+0

come funziona? – Shanimal