2012-04-24 21 views
7

Para implementar la función de petición de fork/pull de Github en mi proyecto, la característica de fusión automática necesita detectar el conflicto entre el repositorio de origen/destino cada vez que se visualiza la solicitud de extracción.Cómo detectar conflictos entre dos repositorios git.

Una solución que me llega es analizar la salida 'git request-pull'. ¿Hay algún método más fácil para detectar el conflicto?

+0

¿Qué se pregunta aquí? ¿Está implementando una herramienta de fusión? ¿O una herramienta de visualización de diferencias? ¿O simplemente curiosidad por lo que 'git push' va a hacer? –

+0

En github, una solicitud de extracción sin conflicto se puede combinar simplemente haciendo clic en un botón en la web. Dado que el repositorio de origen/destino podría seguir cometiendo, la detección de conflictos es una necesidad en este proceso. Estoy preguntando una manera más fácil de detectar el conflicto. – stcatz

Respuesta

-2

Finalmente escribí mi propia función para detectar conflictos.

Es bastante simple, simplemente busque todas las líneas de diferencias, y compare si hay las mismas modificaciones.

+2

Sería genial publicarlo aquí para referencia futura – CharlesB

2

He borrado mi respuesta anterior, que no entendía la pregunta ...

Ahora aquí está la respuesta nueva y brillante:

git merge --ff-only <branch> 

Si no hay conflictos, que va a hacer una fusión . Con un conflicto, le da un mensaje: Not possible to fast-forward. El código de retorno de la consola (echo $?) Es 128 en esta situación.

+0

Esto no es relevante para la pregunta, pero es bueno mientras se combina después de recuperar. –

0

Por lo que yo sé, no puede averiguar si una fusión produciría conflictos hasta que realmente combine estas ramas.

Esto ya se señaló en: How to test a merge without actually merging first.

Por lo tanto, para responder a su pregunta, si necesita implementar este tipo de característica, lo más probable es que intente combinar su fuente/destino y revertir la acción de fusión (usando git reset --hard).

Nunca utilicé git request-pull, pero mirando la salida, no veo ninguna información que pueda ayudarlo a resolver su problema. Probablemente pueda obtener el mismo resultado usando git diff, git wtf, git remote show <name>.

Referencias:

1

Hemos creado un detector de conflictos git que verifica la última confirmación de empuje frente a todas las ramas existentes.

Es un sencillo script simple que se inicia con la URL de GitHub WebHook e incluso se sabe que se envió una notificación de HiChat cuando se detecta un conflicto.

Hemos basado nuestra solución en el análisis de la salida git merge --ff-only <branch> como se puede ver here

Tenemos código abierto que para que todos puedan disfrutar, aprender y contribuir.

Cuestiones relacionadas