Quels fichiers Eclipse appartiennent au contrôle de version?

242

Quels fichiers Eclipse convient-il de placer sous contrôle de source, en dehors des sources évidemment?

Dans mon projet, en particulier, je me pose des questions sur:

.metadata / *
project-dir / .project
project-dir / .classpath
project-dir / .settings / *

S'il y en a qui en dépendent, veuillez expliquer vos directives.

sblundy
la source

Réponses:

175

Les métadonnées ne doivent pas être gérées dans le contrôle de code source. Ils contiennent principalement des données pertinentes pour votre espace de travail.

La seule exception concerne les .launchfichiers XML (définition du lanceur).

Ils se trouvent dans

[eclipse-workspace]\.metadata\.plugins\org.eclipse.debug.core\.launches

Et ils doivent être copiés dans le répertoire de votre projet: Lorsque votre projet est actualisé, ces configurations seront affichées dans la boîte de dialogue "Exécuter la configuration".

De cette façon, ces fichiers de paramètres de lancement peuvent également être gérés dans le SCM.

(Avertissement: décochez l'option "Supprimer les configurations lorsque la ressource associée est supprimée" dans le panneau de préférences Exécuter / Lancer / Lancer la configuration : Il est courant de supprimer en douceur un projet afin de le réimporter - pour forcer une réinitialisation du métadonnées d'éclipse. Mais cette option, si elle est cochée, supprimera vos paramètres de lancement détaillés!)

project-dir/.project
project-dir/.classpath
project-dir/.settings/* 

devrait être dans votre SCM (en particulier .projectet .classpathselon la documentation Eclipse ).

L'objectif est que n'importe qui puisse extraire / mettre à jour son espace de travail SCM et importer le projet Eclipse dans l'espace de travail Eclipse.

Pour cela, vous souhaitez utiliser uniquement des chemins relatifs dans votre .classpath, en utilisant des ressources liées .

Remarque: il vaut mieux faire project-dirréférence à un répertoire de projet "externe", et non à un répertoire créé sous l'espace de travail eclipse. De cette façon, les deux notions (espace de travail Eclipse vs espace de travail SCM) sont clairement séparées.


Comme le mentionne ipsquiggle dans le commentaire, et comme je l'ai mentionné dans une ancienne réponse , vous pouvez réellement enregistrer la configuration de lancement en tant que fichier partagé directement dans votre répertoire de projet. Toutes les configurations de lancement peuvent ensuite être versionnées comme les autres fichiers de projet.

(Extrait de l'article de blog Astuce: Création et partage de configurations de lancement à partir de KD)

texte alternatif

VonC
la source
16
Un flux de travail (IMO) bien meilleur pour travailler avec quoi que ce soit en .metadata pour les fichiers .launch est: lorsque vous modifiez une configuration de lancement, dans l' commononglet, choisissez Save as > shared file. Cela le dépose directement dans le dossier du projet, il peut donc être SCM avec le reste du projet.
Ipsquiggle
3
Pourquoi .project devrait-il être dans SCM? Par exemple, je souhaite utiliser un outil de mesure de code qui provoque des modifications dans .project lorsqu'il est activé. Je ne voudrais pas imposer cela à tous les utilisateurs du projet.
jfritz42
8
@ jfritz42: si vous effectuez un changement local et ponctuel valable uniquement pour vous, alors ignorez cette version .projectpour le moment uniquement pour votre espace de travail. Mais ne privez pas tous les autres utilisateurs de la définition de projet Eclipse commune qu'ils peuvent importer rapidement dans leur espace de travail Eclipse, simplement parce que vous avez une définition supplémentaire qui ne répondrait qu'à vos besoins du moment.
VonC
7
Je vous remercie. J'étudierai attentivement ces liens, mais je constate déjà que dans le premier de vos liens, une réponse commence par «définitivement oui» tandis que la toute suivante commence par «définitivement non». Google regorge de conseils variés et hostiles aux débutants. Je comprends l'objectif, mais comment y arriver est le problème. Je viens de Xcode où les options source et utilisateur sont clairement séparées des sorties générées par Xcode et générées par le compilateur afin que cette question ait une réponse simple. Pour le débutant Eclipse, il semble que ces fichiers soient mélangés et dispersés. Je cherche une réponse simple et compréhensible
garyp
3
Je viens de VisualStudio, et j'appuie @garyp ici - c'est vraiment un bordel chaud - si Eclipse a besoin de créer des fichiers par utilisateur temporaires et / ou inutiles à suivre, il devrait les placer ailleurs, de sorte que les définitions de projet et de construction peuvent être suivies et toutes les ordures temporaires ne gênent pas. N'y a-t-il pas quelque part des conseils officiels de la part de l'équipe Eclipse? (Il est assez clair que l'équipe eclipse ne fait pas de test unitaire [ou s'ils le font, ils ne le font pas efficacement] mais au moins dites-moi qu'ils utilisent le contrôle de source! XD)
BrainSlugs83
19

Je travaille actuellement sur un projet où nous avons les fichiers .project et .cproject sous contrôle de source. L'idée était que les paramètres liés aux chemins de bibliothèque et aux directives de liaison se propageraient à travers l'équipe.

Dans la pratique, cela n'a pas très bien fonctionné, les fusions reviennent presque toujours dans un état conflictuel qui doit être déconflité en dehors de l'éclipse, puis le projet a été fermé et rouvert pour que les modifications prennent effet.

Je ne recommanderais pas de les garder sous contrôle de source.

pdemarest
la source
14

Cela ne vaut rien que les fichiers de configuration CDT ne soient pas compatibles avec le contrôle de source. Un bogue a été déposé pour les fichiers .cproject qui changent très fréquemment et provoquent des conflits, voir Partager des fichiers de projet cdt dans le référentiel provoque toujours des conflits .

Diaa Sami
la source
Oui - ce bug a six ans et n'est toujours pas touché. Clairement, la prise en charge du contrôle des sources n'est pas une priorité pour l'équipe Eclipse!
BrainSlugs83
2
Il convient également de noter que le fichier .cproject contient des informations de configuration que vous préférez ne pas forcer d'autres développeurs à recréer manuellement. Pouah.
Christopher Barber
7

Certains projets, comme ceux utilisant Maven, aiment générer les fichiers .project basés sur les POM.

Cela dit, à part cela - les métadonnées ne doivent PAS être en contrôle de source. Votre projet devra déterminer si projectdir / .settings le fait, en fonction de la façon dont vous prévoyez de gérer les normes, etc. Si vous pouvez honnêtement faire confiance à vos développeurs pour configurer leur environnement sur la base de la norme et que vous n'avez rien à personnaliser de spécial pour un projet, vous n'avez pas besoin de les mettre dedans. Moi, je vous recommande de configurer chaque projet spécifiquement . Cela permet aux développeurs de travailler sur plusieurs projets dans le même espace de travail sans avoir à modifier les paramètres par défaut d'avant en arrière, et rend les paramètres très explicites, remplaçant quels que soient leurs paramètres par défaut pour correspondre aux normes du projet.

La seule partie difficile est de s'assurer qu'ils restent tous synchronisés. Mais dans la plupart des cas, vous pouvez copier les fichiers .settings d'un projet à l'autre. S'il y en a spécifiquement que vous ne voulez pas dans le contrôle de code source, faites l'équivalent de définir svn: ignore pour eux, si votre SCM le prend en charge.

John Stoneham
la source
2
Nous utilisons Maven 1 et 2, et il ne génère le fichier .project que si vous le lui demandez. Et même si vous le faites, il le fait en fonction du contenu du POM, donc si un autre développeur a déjà fait cette étape pour vous et vérifié le résultat dans le contrôle de version, pourquoi ne pas en profiter?
Andrew Swan
6

Le fichier .classpath est définitivement un bon candidat pour vérifier dans scm car le configurer à la main peut être beaucoup de travail et sera difficile pour les nouveaux développeurs d'entrer dans le projet. Il est vrai qu'il peut être généré à partir d'autres sources, auquel cas vous devriez archiver l'autre source.

Quant aux .settings, cela dépend des paramètres. Il s'agit d'une zone grise, mais certains paramètres sont presque obligatoires et il est pratique de pouvoir extraire un projet, de l'importer dans Eclipse et d'avoir tout configuré et prêt à fonctionner.

Dans notre projet, nous conservons donc une copie du dossier .settings appelé CVS.settings et nous avons une tâche ant pour la copier dans .settings. Lorsque vous obtenez le projet de CVS, vous appelez la tâche de fourmi «eclipsify» pour copier les paramètres par défaut dans le nouveau dossier .settings. Lorsque vous configurez les paramètres nécessaires à tous ceux qui développent le projet, vous les fusionnez dans le dossier CVS.settings et les validez dans CVS. De cette façon, l'enregistrement des paramètres dans SCM devient un processus conscient. Cela nécessite que les développeurs fusionnent ces paramètres dans leurs dossiers .settings de temps en temps lorsque de grands changements sont archivés. Mais c'est un système simple qui fonctionne étonnamment bien.

Stijn de Witt
la source
4

Je ne dirais aucun d'entre eux. Ils contiennent très probablement des informations qui ne concernent que votre poste de travail (je pense aux chemins d'accès aux bibliothèques et à tous). Et si quelqu'un de votre équipe n'utilise pas Eclipse?

agnul
la source
3
Non, vous pouvez avoir des chemins relatifs dans votre .classpath. Voir stackoverflow.com/questions/300328#300346 .
VonC
7
Cela ressemble à une équipe assez incohérente / inefficace si elle n'utilise pas le même dev. outils, projet, débogage et définitions de construction, etc. - Ensuite, vous allez me dire de ne pas utiliser une norme de codage commune ou JDK. - Idéalement, un utilisateur devrait pouvoir retirer un projet du contrôle de code source et sauter directement sans beaucoup de configuration ou d'instructions supplémentaires. Cette réponse est donc tout simplement inacceptable pour moi.
BrainSlugs83
1
Il est beaucoup plus inefficace de gérer les conflits dans les fichiers de préférences lors d'une fusion, simplement parce que quelqu'un a ouvert le projet à partir d'un nouvel espace de travail - c'est un cauchemar dans les grands projets. De plus, forcer à utiliser le même IDE avec exactement la même configuration ressemble à une restriction inutile.
A. Rodas
Je suis d'accord avec [~ agnul]. Les projets doivent utiliser un outil de construction (gradle, maven, ant, etc ...) et l'IDE doit être en mesure d'ouvrir et de configurer le projet à partir du fichier de configuration de l'outil de construction (build.gradle, pom.xml, build.xml, etc ...) Aucun fichier IDE ne doit être contrôlé par la version. Ce sont tous des fichiers spécifiques au développeur, pas des fichiers spécifiques au projet. Ils n'appartiennent pas simplement au contrôle de version.
axiopisty
2

Considérer:

.classpath
.project
.launch

Ceux-ci DEVRAIENT être en contrôle de version tant que vous vous en tenez à l'utilisation des chemins relatifs au projet. Cela permet aux autres développeurs de vérifier le projet et de commencer à travailler immédiatement sans avoir à passer par toutes les difficultés d'installation que les autres développeurs ont également connues.

Vous pourriez être tenté d'inclure des métadonnées dans le contrôle de version afin que les développeurs Eclipse puissent consulter un espace de travail entier et le préconfigurer avec tous les bons projets, mais il comprend de nombreuses informations spécifiques à l'utilisateur que chaque fois que quelqu'un y travaille, il le fera changer, donc je conseillerais de NE PAS INCLURE .metadata. Il est facile de créer un espace de travail local simplement en important tous les projets Eclipse existants.

Alex McCarrier
la source
D'après mon expérience, cela a tendance à se briser de différentes manières lorsque vous mettez à jour Eclipse vers une version plus récente ou basculez entre les versions.
Thorbjørn Ravn Andersen
1

J'ai passé trop d'heures à configurer les paramètres de l'espace de travail Eclipse pour les nouveaux collègues (et moi-même). J'ai fini par copier mes propres métadonnées sur la nouvelle machine de développement.

Si vous travaillez en équipe, je pense que les candidats suivants sont de très bons candidats à garder sous contrôle de version:

  • JRE installés et leurs noms
  • Environnements d'exécution du serveur
  • Modèles d'éditeur Java
  • Raccourcis clavier de contrôle de version
  • Paramètres de plugin qui ne fournissent pas de paramètres spécifiques au projet
  • Paramètres Maven
  • Perspectives préconfigurées
  • ...
Reto Höhener
la source