Comment gérer les fichiers projet IntelliJ IDEA sous contrôle git?

tout le monde dans notre équipe utilise IntelliJ idée, et nous trouvons utile de mettre ses dossiers de projet (.droits de propriété intellectuelle et .iml) dans le contrôle source afin que nous puissions partager les configurations de construction, les réglages et les inspections. De plus, nous pouvons ensuite utiliser ces réglages d'inspection sur notre serveur d'intégration continue avec TeamCity. (Nous avons l'espace de travail par utilisateur .iws fichier dans le .gitignore fichier et pas dans le contrôle à la source.)

cependant, ces fichiers changent de petites façons quand vous faites à peu près rien dans l'IDÉE. Il y a un problème dans la base de données des problèmes D'IDEA pour cela ( IDEA-64312 ), donc peut-être que l'on pourrait considérer cela comme un bug dans IDEA, mais c'est un bug avec lequel nous devrons vivre dans un avenir prévisible.

jusqu'à récemment, nous utilisions Subversion, mais nous sommes récemment passés à git. Nous avions juste pris l'habitude d'avoir une liste de changement de dossiers de projet que nous avons ignorés et n'avons pas vérifié à moins qu'il y ait des changements de dossiers de projet que nous voulions partager avec d'autres. Mais avec Git, le vrai pouvoir semble être (d'après ce que nous explorons) la ramification continue qu'elle encourage, et passer d'une branche à l'autre est une douleur avec les fichiers de projet ayant toujours été modifiés. Souvent, il peut simplement fusionner dans les modifications d'une manière ou d'une autre, et essaie de gérer les modifications du fichier de projet qui sont maintenant appliquées à la nouvelle branche. Cependant, si la nouvelle direction générale a modifié les fichiers de projet (comme la Direction générale travaille sur un nouveau module qui n'est pas encore dans les autres directions générales), git lance juste une erreur qu'il ne fait aucun sens de fusionner dans les fichiers lorsque la branche a des changements et que vous avez des changements localement, et je peux plutôt comprendre son point. De la ligne de commande, on peut utiliser "-f "sur la commande" git checkout " pour la forcer à rejeter les changements locaux et utiliser la branche à la place, mais (1) la commande git Checkout GUI dans IDEA (10.5.1) ne semble pas avoir cette option que nous pouvons trouver, donc nous aurions besoin de passer à la ligne de commande sur une base régulière, et (2) Nous ne sommes pas sûrs de vouloir prendre l'habitude d'utiliser ce drapeau et de dire à Git de rejeter nos changements locaux.

donc, voici quelques idées que nous avons sur les options que nous avons à traiter avec cela:

  1. prendre les fichiers de projet hors de contrôle à la source entièrement. Les mettre dans le .gitignore, et les distribuer à chaque personne et TeamCity via un autre moyen, peut-être en les mettant dans le contrôle source ailleurs ou sous d'autres noms. Notre équipe assez petite cette option est assez faisable pour être considérée, mais elle ne semble pas grande.
  2. continuer à vivre avec, en essayant d'être sûr de gérer les fichiers que nous avons sur les branches à un moment donné. Dans ce cadre, on pourrait les encourager à chaque développeur d'avoir plus d'une copie de chaque projet sur leur système, donc ils peuvent avoir l'extrait d'une autre branche avec éventuellement différents ensembles de fichiers de projet.
  3. essayez d'avoir juste le projet (.dpi) dans le contrôle source, avec le module (.iml) les fichiers qui ne sont pas dans le contrôle source et dans le .dossier gitignore. La principale chose qui semble basculer autour de sa propre dans la .ipr sur une base régulière est l'ordre des configurations de construction partagées, mais peut-être que nous pouvons simplement partager les informations séparément sur la façon de les configurer. Je ne suis pas tout à fait sûr comment IDEA traite avec ce genre de chose de n'avoir que certains de ses fichiers cependant, surtout sur une nouvelle caisse.

je suppose que je suis en espérant qu'il y ait une solution évidente (ou non évidente) que nous avons manquée, peut-être traitant de l'énorme personnalisabilité que Git et L'idée semblent avoir tous les deux. Mais on dirait qu'on ne peut pas être la seule équipe à avoir ce problème. Les Questions qui sont un peu similaires sur StackOverflow comprennent 3495191 , 1000512 , et 3873872 , mais je ne sais pas si c'est exactement le même problème, et peut-être que quelqu'un peut venir avec les pros et contre les diverses approches que j'ai décrites, les approches énumérées dans les réponses à ces questions, ou les approches qu'ils recommandent.

Merci.

139
demandé sur Community 2011-08-15 04:34:40

6 réponses

vous pouvez utiliser la structure de projet basée sur les répertoires de IDEA , où les paramètres sont stockés .idée répertoire au lieu de .dpi fichier. Il donne plus contrôle à grain fin sur ce qui est stocké dans le contrôle de version. Le. les fichiers iml seront toujours présents, donc il ne résout pas les changements aléatoires en eux (peut-être les garder hors du contrôle des sources?), mais partager des choses comme le style de code et les profils d'inspection est facile, puisque chacun d'eux sera dans son propre fichier de sous la .idée de répertoire.

44
répondu Esko Luontola 2017-05-11 09:03:14

du DOC officiel: http://devnet.jetbrains.com/docs/DOC-1186

en fonction du format du projet IntelliJ IDEA (.dpi fichier ou .idea directory based), vous devez mettre L'idée IntelliJ suivante fichiers de projet sous le contrôle de version:

.dpi basé sur le format

partagez le projet .dpi fichier et et tous la .les fichiers du module iml, Non partager la .fichier iws comme il stocke les paramètres spécifiques d'utilisateur.

.idée d'annuaire basé sur le format

partagez tous les fichiers.répertoire d'idées dans la racine du projet sauf espace.xml et les tâches.fichiers xml qui stockent des données spécifiques à l'utilisateur paramètres, également de partager tous les .les fichiers du module iml.

je l'ai mis dans mon .gitignore:

#Project
workspace.xml
tasks.xml
29
répondu Felipe 2013-09-18 00:57:25

Un réponse officielle est disponible . En supposant que vous utilisez le moderne (et maintenant par défaut) .idea format de projet de dossier:

  • ajouter tout...
  • sauf .idea/workspaces.xml (qui est propre à l'utilisateur)
  • sauf .idea/tasks.xml (qui est propre à l'utilisateur)
  • sauf quelques autres fichiers qui peuvent contenir des mots de passe / clés / etc (Voir lien ci-dessus pour plus de détails)

Ce de l'échantillon .le fichier de gitignore peut être une référence utile, mais vous devez quand même lire le lien ci-dessus pour comprendre pourquoi ces entrées apparaissent et décider si vous en avez besoin.

personnellement, J'ignore également le fichier .idea/find.xml car cela semble changer chaque fois que vous effectuez une opération de recherche.

22
répondu Drew Noakes 2018-01-25 19:24:22

j'ai pris espace de travail.xml de contrôle à la source (+ ajouté .gitignore).

16
répondu ripper234 2011-09-07 14:25:11

notre équipe ne vérifie pas les fichiers IntelliJ spécifiques au chemin. Nous supposons que les gens savent comment utiliser L'IDE et mettre en place un projet. Les fichiers IntelliJ vont dans la liste de modifications "ignorées".

mise à jour:

la réponse est plus facile maintenant que J'utilise Maven et sa structure de répertoire par défaut.

IntelliJ doit être demandé d'ignorer tous les fichiers dans les dossiers /.svn , /.idea et /target . Tout ce qui a trait à un l'information sur le chemin de l'individu est stockée dans /.idea .

tout le reste est juste pour être engagé dans Subversion ou Git.

10
répondu duffymo 2016-05-24 17:53:01

juste pour partager une autre approche que mon équipe a utilisée: il suffit de déplacer n'importe quels fichiers liés à IDE à un endroit différent où IntelliJ ne reconnaît pas, et créer un script pour les copier à l'emplacement "actif" désiré qui est ignoré par GIT.

l'avantage de cette approche est que vous avez gardé l'option de partager les paramètres IDE par le contrôle de version. Le seul inconvénient est que vous devez décider quand lancer le script (probablement une fois par clone d'espace de travail ou quand les changements sont vous pouvez automatiser cela en incorporant le script dans votre processus de construction ou de post-fusion.

cette approche repose sur le fait que IntelliJ ne recherche que des emplacements particuliers pour ses fichiers de configuration, elle s'applique donc également aux fichiers de configuration framework. En fait nous avons ignoré Graal .propriétés fichier de la même façon, de sorte que les développeurs ne seront pas accidentellement vérifier leurs changements de configuration locale.

2
répondu Shawn 2016-01-11 21:25:33