¿Cómo acomodar múltiples styles de encoding? (git vs. IDE)

Estoy queueborando en un proyecto Java gestionado por mape de Git con diferentes preferences de estilo de código con usuarios que usan IDE múltiples (nota 1).

¿Hay alguna herramienta o configuration IDE que permita ver y editar el código usando style-1 , pero comprometido con SCM usando style-2 ?

Mi investigación me indica 'no', pero podría ser posible una solución que combine git hooks y Checkstyle / jrefactory .

Entonces, si 'no' arriba, ¿hay alguna herramienta / process que realice las acciones del process TBD a continuación?

El flujo del process de pago para el Usuario1 sería:

  1. git pull
  2. El código de los formattings de process TBD a User1 style-1
  3. El usuario1 funciona en su IDE preferido con la configuration de estilo-1

El flujo de trabajo de commit para User1 sería:

  1. Usuario1 está listo para confirmar / presionar código
  2. El código de los formattings de process TBD es estándar de estilo de formatting estándar
  3. git push

Nota 1: IDE múltiples = Eclipse, IntelliJ, Netbeans.

Nota 2: Mi pregunta difiere de esta pregunta en que me gustaría enfocarme en una solución relacionada con IDE, ya que forzar a la minoría de usuarios divergentes de estándares probablemente sea una solución más eficiente.

Nota 3: Reconociendo que esto no debe hacerse por razones de buenas prácticas. Sin embargo, si usted admite que es el momento de esperar más flexibilidad de nuestros IDEs y SCM, esta pregunta tiene la intención de explorar esas soluciones.

Antes que nada, realmente no deberías hacer eso . Las guerras de estilo de código son malas para cualquier proyecto, y lo mejor es decidir sobre un estilo de código que todos deben usar. Es simple configurar IDE para aplicar automáticamente el estilo de código especificado en cada almacenamiento de files, por lo que los desarrolladores no tienen que escribir código en el estilo de código de destino, pueden dejar que el IDE lo haga por ellos. Es cierto que esto no resuelve el hecho de que tendrán que leer el código en un estilo de código que aún no les gusta, pero es mucho más seguro que tener cambios invisibles en el código automático; esa es una fuente importante de errores.

Tal vez pueda usar el formateador de código de Eclipse desde la línea de command para aplicar un estilo de código diferente. Tendría que configurar git hooks, asegurarse de que todos tengan Eclipse disponible y proporcionar los files de configuration adecuados para su estilo de código preferido. Necesitará anzuelos tanto para post-checkout como pre-commit, uno para configurar el estilo de código del usuario y el otro para comprometerse con el estilo de código central. Para ir un paso más allá, puede jugar con el índice para agregar el código formateado para que no incluya diferencias de estilo en git diff (aunque se mostrarán en git diff --staged ).

Nuevamente, no deberías hacer eso .

Estoy de acuerdo con Sergiu Dumitriu en que esta no es una muy buena idea. Pero aún así, git brinda exactamente lo que estás buscando. Aunque esto solo funcionará si su coding style central está muy bien definido y se sigue estrictamente. Así es como funciona:

Git proporciona filters de manchas / limpieza . Le permiten pasar todo el código a través de un filter llamado "borrón" en el process de pago e invertirlo con un filter "limpio" cuando se agrega el código al área de preparación. Estos filters están establecidos en .gitattributes , y hay una versión local del repository de ese file disponible en .git/info/attributes . Así que configura su filter de manchas en una herramienta que cambiará el código a su coding style personal en el process de pago:

filtro de manchas

Y su filter limpio convertirá el código de nuevo al coding style central al registrarse (más precisamente: cuando el file está en etapas):

filtro limpio

Es muy importante que la smudge -> clean sea ​​un no-operador / genere el file original otra vez. De lo contrario, seguirá revisando los cambios de formatting cada vez que cambie un file.

El uso de manchas y filters limpios retendrá toda la funcionalidad de git (incluido git diff etc.). Puede encontrar el documento completo en git help attributes