Cuando esté listo para fusionar mi sucursal volverá a desarrollarse (énfasis mío)
Los conflictos de manejo en git merge
son a menudo más simples que en git rebase
. En Git merge puedes ver la lista completa de archivos que se han modificado a la vez. No importa cuántas confirmaciones hayan realizado otros compañeros de trabajo, tendrá que fusionar una vez . Con el flujo de trabajo de rebase, puede terminar teniendo los mismos conflictos una y otra vez y tendrá que revisarlos manualmente. Puedes terminar arreglando el 13º compromiso y sentir que no puedes ver la luz saliendo del túnel .
Según mi experiencia, cuando intenté resolver ingenuamente los conflictos de rebase repetidos terminé perdiendo las modificaciones de alguien o con una aplicación que ni siquiera compilaba. A menudo, yo y mis compañeros de trabajo trabajamos mucho, pero nos sentimos tan abrumados por la complejidad de los conflictos repetidos que tuvimos que abortar y perder nuestro trabajo anterior después de un puñado de confirmaciones de rebase.
Le sugeriré algunas técnicas, pero solo pueden ayudar a que la fusión sea más fácil que automatizar la tarea.
-
Archivos de recursos / idioma . Si tiene cambios aditivos en un archivo de recursos, asegúrese de moverlos siempre al final del archivo para poder recordar fácilmente los cambios contra otros cambios. Es posible que pueda copiar y pegar los cambios en la parte inferior, o simplemente eliminar los marcadores de conflicto
-
Hacer. No. ABSOLUTAMENTE. Re-formatear . Ni usted ni sus compañeros desarrolladores deberán realizar un "cambio de formato de código masivo" durante el trabajo diario. El reformateo de código agrega un número excesivo de falsos positivos en la gestión de conflictos. Se puede reformatear el código.
- de forma incremental, por ejemplo, por cada desarrollador en cada confirmación, tan pronto como utilizan una herramienta automatizada (por ejemplo, Eclipse tiene una opción para volver a formatear al guardar, Vanilla Visual Studio no tiene ninguna). Absolutamente todos los desarrolladores deben usar los mismos estándares de formato de código, codificados en un archivo de formato que se come por su IDE. Para darte una idea, si son 4 espacios o 2 pestañas no importa, pero realmente importa si todos usan el mismo.
- Justo antes del lanzamiento, por un líder de equipo. Si se produce una confirmación de "cambio de formato de código" cuando las personas no están trabajando en las sucursales, es decir, antes de que se ramifiquen, las cosas se harán más fáciles
-
Revisar el trabajo que se divide entre compañeros de trabajo. Esta es la parte donde viene la mayoría de la ingeniería. Como señalan otras respuestas, es olor a diseño si varios desarrolladores que realizan diferentes tareas tienen que tocar los mismos recursos. Es posible que tenga que discutir con el líder de su equipo qué parte debe ser modificada por cada desarrollador concurrente.
También he visto algunos malos hábitos en los flujos de trabajo de Git en mis equipos. A menudo las personas se comprometen demasiado a sus ramas. Personalmente, fui testigo de que un desarrollador agregaba de 10 a 20 confirmaciones etiquetadas como "corregir", cada una de las cuales cometía una o dos líneas. Nuestra política es que las confirmaciones estén etiquetadas con boletos JIRA para darle una idea.
@JacobRobbins sugiere hacer de git rebase
una tarea diaria. Me gustaría impulsar su enfoque hacia adelante.
Primero, use rebase una vez solo para reducir el número de confirmaciones a un puñado. Y rebase solo en la rama de desarrollo original , que es el compromiso desde el que se ha ramificado. Cuando digo unos cuantos, podría significar 3 o 4 (por ejemplo, todos los front-end, todos los back-end, todos los parches de la base de datos) o cualquier cifra humanamente razonable. Una vez que los haya consolidado, use fetch
y trabaje su rebase en la rama ascendente. Esto no lo salvará de conflictos a menos que su equipo revise su propio enfoque, pero hará que su vida sea menos dolorosa.
Si tiene preguntas adicionales sobre las tareas específicas, no dude en buscar y preguntar en Stackoverflow.
[Editar] sobre la regla de no reformateo y boy scout. He reformulado ligeramente RE-format para resaltar que lo que quiero decir es la tarea de formatear desde cero todo el archivo fuente, incluido el código que no ha sido tocado por usted. Al contrario de formatear siempre su propio código, que es perfectamente boy scouty, varios desarrolladores, incluido yo mismo, se utilizan para reformatear todo el archivo con las capacidades del IDE. Cuando el archivo es tocado por otros, incluso si las líneas afectadas no se modifican en su contenido y semántica, Git lo verá como un conflicto. Solo un editor muy poderoso que tenga en cuenta el idioma puede sugerir que el conflicto solo está relacionado con el formateo y la fusión automática del fragmento con el mejor formato. Pero no tengo pruebas de ninguna herramienta de este tipo.
Después de todo, la regla de los boy scouts no te obliga a limpiar el desorden de otras personas. Sólo tuyo.