¿Qué archivos de Eclipse pertenecen al control de versiones?


242

¿Qué archivos de Eclipse es apropiado poner bajo control de la fuente, aparte de las fuentes obviamente?

En mi proyecto, específicamente, me pregunto sobre:

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

Si hay alguno de estos de los cuales depende, explique sus pautas.

Respuestas:


175

Los metadatos no deben gestionarse en el control de origen. Contienen principalmente datos relevantes para su espacio de trabajo.

La única excepción son los .launcharchivos XML (definición del iniciador).

Se encuentran en

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

Y deben copiarse en el directorio de su proyecto: cuando se actualiza su proyecto, esas configuraciones se mostrarán en el cuadro de diálogo "Ejecutar configuración".

De esa manera, esos archivos de parámetros de lanzamiento también se pueden administrar en el SCM.

(Advertencia: desmarque la opción "Eliminar configuraciones cuando se elimine el recurso asociado" en el panel de preferencias Ejecutar / Iniciar / Iniciar configuración : es común eliminar un proyecto para volver a importarlo de nuevo, para forzar una reinicialización del metadatos de eclipse. ¡Pero esta opción, si está marcada, eliminará sus parámetros detallados de inicio!)

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

debe estar en su SCM (especialmente .projecty de .classpathacuerdo con la documentación de Eclipse ).

El objetivo es que cualquiera pueda pagar / actualizar su espacio de trabajo SCM e importar el proyecto Eclipse al espacio de trabajo Eclipse.

Para eso, desea utilizar solo rutas relativas en su .classpath, utilizando recursos vinculados .

Nota: es mejor si se project-dirrefiere a un directorio de proyecto "externo", no a un directorio creado bajo el espacio de trabajo de eclipse. De esa manera, las dos nociones (espacio de trabajo eclipse vs. espacio de trabajo SCM) están claramente separadas.


Como menciona ipsquiggle en el comentario, y como he mencionado en una respuesta anterior , en realidad puede guardar la configuración de inicio como archivo compartido directamente en el directorio de su proyecto. Toda la configuración de inicio se puede versionar como los otros archivos del proyecto.

(De la publicación del blog Consejo: Creación y uso compartido de configuraciones de lanzamiento desde KD)

texto alternativo


16
Un flujo de trabajo (IMO) mucho mejor para trabajar con cualquier cosa en .metadata para los archivos .launch es: cuando edita una configuración de inicio, en la commonpestaña, elija Save as > shared file. Esto lo deja directamente en la carpeta del proyecto, por lo que puede ser SCM con el resto del proyecto.
Ipsquiggle

3
¿Por qué debería .project estar en SCM? Por ejemplo, quiero usar una herramienta de métricas de código que causa cambios en .project cuando está habilitada. No quisiera forzar eso en todos los usuarios del proyecto.
jfritz42

8
@ jfritz42: si realiza un cambio local y puntual válido solo para usted, haga que la versión .projectignorada por el momento sea solo para su espacio de trabajo. Pero no prive a todos los demás usuarios de la definición común de proyecto de Eclipse que pueden importar rápidamente en su espacio de trabajo de Eclipse, solo porque tiene una definición adicional que se adaptaría solo a su necesidad del momento.
VonC

77
Gracias. Estudiaré esos enlaces cuidadosamente, pero ya me doy cuenta de que en el primero de sus enlaces una respuesta comienza "Definitivamente sí" mientras que la siguiente comienza "Definitivamente no". Google está lleno de consejos variados y poco amigables para los novatos. Entiendo el objetivo, pero cómo llegar allí es el problema. Vengo de Xcode, donde las opciones de origen y de usuario están separadas de la salida generada por Xcode y por el compilador para que esta pregunta tenga una respuesta simple. Para el novato de Eclipse, parece que esos archivos están mezclados y dispersos. Estoy buscando una respuesta simple y comprensible
garyp

3
Vengo de VisualStudio land, y segundo @garyp aquí, esto es realmente un desastre, si Eclipse necesita hacer archivos temporales y / o innecesarios para rastrear por usuario, debería colocarlos en otro lugar, para que el proyecto y las definiciones de compilación pueden rastrearse y toda la basura temporal no se interpone en el camino. ¿No hay más orientación oficial del equipo de Eclipse en alguna parte? (Está bastante claro que el equipo de eclipse no prueba la unidad [o si lo hacen, no lo hacen de manera efectiva], ¡pero al menos dime que usan el control de fuente! XD)
BrainSlugs83

19

Actualmente estoy trabajando en un proyecto donde tenemos los archivos .project y .cproject bajo control de código fuente. La idea era que las configuraciones relacionadas con las rutas de la biblioteca y las directivas de enlaces se propagarían por todo el equipo.

En la práctica, no ha funcionado muy bien, las fusiones casi siempre regresan en un estado conflictivo que debe desconfigurarse fuera del eclipse y luego el proyecto se cierra y se vuelve a abrir para que los cambios surtan efecto.

No recomendaría mantenerlos en control de fuente.


14

No vale nada que los archivos de configuración de CDT no sean compatibles con el control de origen. Se ha registrado un error para los archivos .cproject que cambian con mucha frecuencia y causan conflictos. Consulte Compartir archivos de proyecto cdt en el repositorio siempre causa conflictos .


Yikes: este error tiene seis años y aún no se ha tocado. ¡Claramente el soporte de control de fuente no es una prioridad para el equipo de Eclipse!
BrainSlugs83

2
También debe tenerse en cuenta que el archivo .cproject contiene información de configuración que preferiría no forzar a otros desarrolladores a tener que recrear manualmente. Ugh
Christopher Barber

7

Algunos proyectos, como los que usan Maven, les gusta generar los archivos .project basados ​​en POM.

Dicho esto, aparte de eso, .metadata NO debería estar en control de fuente. Su proyecto tendrá que determinar si projectdir / .settings lo hace, en función de cómo planea administrar los estándares y demás. Si puede confiar honestamente en que sus desarrolladores configuren su entorno en función del estándar, y no tiene que personalizar nada especial para ningún proyecto, entonces no necesita ponerlos. Yo, le recomiendo configurar cada proyecto específicamente . Esto permite a los desarrolladores trabajar en cosas de múltiples proyectos en el mismo espacio de trabajo sin tener que cambiar la configuración predeterminada de un lado a otro, y hace que la configuración sea muy explícita, anulando cualesquiera que sean sus configuraciones predeterminadas para que coincidan con los estándares del proyecto.

La única parte difícil es asegurarse de que todos estén sincronizados. Pero en la mayoría de los casos, puede copiar los archivos .settings de un proyecto a otro. Si hay alguno que no desee específicamente en el control de fuente, haga el equivalente de configurar svn: ignórelo si su SCM lo admite.


2
Usamos Maven 1 y 2, y solo genera el archivo .project si usted lo solicita. E incluso si lo hace, lo hace en función del contenido del POM, por lo que si otro desarrollador ya ha hecho ese paso por usted y ha verificado el resultado en el control de versiones, ¿por qué no aprovechar eso?
Andrew Swan el

6

El archivo .classpath es definitivamente un buen candidato para registrarse en scm, ya que configurarlo a mano puede ser mucho trabajo y será difícil para los nuevos desarrolladores ingresar al proyecto. Es cierto que puede generarse a partir de otras fuentes, en cuyo caso debería verificar en la otra fuente.

En cuanto a .settings, depende de la configuración. Esta es un área gris, pero algunas configuraciones son casi obligatorias y es conveniente poder verificar un proyecto, importarlo en Eclipse y tener todo listo y listo.

En nuestro proyecto, por lo tanto, mantenemos una copia de la carpeta .settings llamada CVS.settings y tenemos una tarea ant para copiarla en .settings. Cuando obtiene el proyecto de CVS, llama a la tarea ant 'eclipsify' para copiar la configuración predeterminada a la nueva carpeta .settings. Cuando configura los ajustes que necesitan todos los que se desarrollan en el proyecto, los combina nuevamente en la carpeta CVS.settings y los confirma en CVS. De esta forma, guardar la configuración en SCM se convierte en un proceso consciente. Requiere que los desarrolladores fusionen esas configuraciones nuevamente en sus carpetas .settings de vez en cuando cuando se registran grandes cambios. Pero es un sistema simple que funciona sorprendentemente bien.


4

Yo diría que ninguno de ellos. Lo más probable es que contengan información relevante solo para su estación de trabajo (estoy pensando en rutas para bibliotecas y todo). Además, ¿qué pasa si alguien en su equipo no está usando Eclipse?


3
No, puedes tener rutas relativas en tu .classpath. Consulte stackoverflow.com/questions/300328#300346 .
VonC

77
Suena como un equipo bastante incoherente / ineficiente si no están usando el mismo desarrollador. herramientas, proyectos, depuración y definiciones de compilación, etc. - A continuación, me dirá que no use un estándar de codificación común o JDK. - Idealmente, un usuario debería poder desplegar un proyecto desde el control de origen y saltar directamente sin mucha configuración o instrucciones adicionales. Entonces esta respuesta es simplemente inaceptable para mí.
BrainSlugs83

1
Es mucho más ineficiente lidiar con los conflictos en los archivos de preferencias durante una fusión, solo porque alguien abrió el proyecto desde un nuevo espacio de trabajo; esto es una pesadilla en grandes proyectos. Además, obligar a usar el mismo IDE con exactamente la misma configuración suena como una restricción innecesaria.
A. Rodas

Estoy de acuerdo con [~ agnul]. Los proyectos deberían usar alguna herramienta de compilación (gradle, maven, ant, etc.) y el IDE debería poder abrir y configurar el proyecto desde el archivo de configuración de la herramienta de compilación (build.gradle, pom.xml, build.xml, etc ...) Ningún archivo IDE debe ser controlado por la versión. Todos son archivos específicos del desarrollador, no archivos específicos del proyecto. Simplemente no pertenecen al control de versiones.
axiopisty

2

Considerar:

.classpath
.project
.launch

Estos DEBEN estar en control de versiones siempre y cuando se apegue a usar rutas relativas al proyecto. Esto permite a otros desarrolladores revisar el proyecto y comenzar a trabajar de inmediato sin tener que pasar por todo el problema de configuración que otros desarrolladores también experimentaron.

Es posible que sienta la tentación de incluir .metadata en el control de versiones para que los desarrolladores de Eclipse puedan revisar un espacio de trabajo completo y tenerlo preconfigurado con todos los proyectos correctos, pero incluye una gran cantidad de información específica del usuario que siempre que alguien trabaje en él, lo hará cambiar, por lo que aconsejaría NO INCLUIR .metadata. Es fácil construir un espacio de trabajo local simplemente importando todos los proyectos Eclipse existentes.


En mi experiencia, esto tiende a romperse de varias maneras cuando actualiza Eclipse a una versión más nueva, o cambia entre sabores.
Thorbjørn Ravn Andersen

1

He pasado demasiadas horas configurando la configuración del espacio de trabajo de eclipse para nuevos colegas (y para mí). Lo que finalmente terminé haciendo fue copiar mis propios metadatos a la nueva máquina de desarrollo.

Si está trabajando en un equipo, creo que los siguientes son muy buenos candidatos para mantener bajo control de versión:

  • JRE instalados y sus nombres
  • Entornos de tiempo de ejecución del servidor
  • Plantillas del editor de Java
  • Métodos abreviados de teclado de control de versiones
  • Configuraciones de complementos que no proporcionan configuraciones específicas del proyecto
  • Ajustes de Maven
  • Perspectivas preconfiguradas
  • ...
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.