Tengo un superproyecto git que hace referencia a varios submódulos y estoy tratando de bloquear un flujo de trabajo para que el resto de los miembros de mi proyecto trabajen.
Para esta pregunta, digamos que se llama a mi superproyecto y se llama supery
al submódulo subby
. (Entonces es una simplificación de lo que estoy tratando de hacer ... En realidad no estoy usando las ramas para las versiones, pero pensé que sería más fácil presentarlas como una pregunta).
Mi rama maestra de supery
tiene la etiqueta v1.0
del proyecto git subby
referenciada como un submódulo. La rama de supery
llamado one.one
y cambió la referencia del submódulo para apuntar a la etiqueta v1.1
de subby
.
Puedo trabajar dentro de cada una de estas ramas sin problemas, pero si trato de actualizar la one.one
rama con los cambios de la master
rama, recibo algunos conflictos y no sé cómo resolverlos.
Básicamente, después de correr un git pull . master
tiempo en la subby
rama, parece que crea submódulos adicionales.
Antes de la extracción / fusión, obtengo la respuesta deseada git submodule
de la one.one
rama:
$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)
Pero después de la extracción, agrega submódulos adicionales cuando ejecuto git submodule
:
$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.
$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)
¿Cómo elimino / ignoro las referencias de submódulos no deseados y confirmo mis conflictos y cambios? ¿O hay algún parámetro que pueda usar con mi original git pull
que ignore mis submódulos?
fuente
added by us: ../Mono.Cecil
engit status
perogit add
ygit rm
fallidas conMono.Cecil: needs merge, pathspec 'Mono.Cecil/' did not match any files
porque era simplemente una carpeta vacía y git en realidad sólo trata los archivos.git checkout
me dioMono.Cecil: needs merge, error: you need to resolve your current index first
,git submodule update
dioSkipping unmerged submodule Mono.Cecil
ygit checkout master Mono.Cecil
FINALMENTE lo arregló. Problema básico: lagit status
sugerencia es incorrecta, ¡así que elige una rama y toma su copia de la carpeta concheckout
!git checkout --ours SUBMOD
ygit add SUBMOD
entre otros, pero finalmente el hacergit checkout master SUBMOD
arreglado el conflicto. Este comentario probablemente debería ser una respuesta, no un comentario ... :)Bueno, técnicamente no está gestionando conflictos con submódulos (es decir, mantener esto pero no eso), pero encontré una manera de continuar trabajando ... y todo lo que tuve que hacer fue prestar atención a mi
git status
salida y restablecer los submódulos:Eso restablecería el submódulo a la confirmación previa a la extracción. Que en este caso es exactamente lo que quería. Y en otros casos donde necesito los cambios aplicados al submódulo, me encargaré de aquellos con los flujos de trabajo de submódulo estándar (maestro de pago, extraer la etiqueta deseada, etc.).
fuente
Luché un poco con las respuestas a esta pregunta y tampoco tuve mucha suerte con las respuestas en una publicación SO similar . Así que esto es lo que funcionó para mí, teniendo en cuenta que en mi caso, el submódulo fue mantenido por un equipo diferente, por lo que el conflicto provino de diferentes versiones de submódulos en master y mi rama local del proyecto en el que estaba trabajando:
git status
: tome nota de la carpeta del submódulo con conflictosRestablezca el submódulo a la versión que se confirmó por última vez en la rama actual:
git reset HEAD path/to/submodule
En este punto, tiene una versión libre de conflictos de su submódulo que ahora puede actualizar a la última versión en el repositorio del submódulo:
Y ahora puedes
commit
hacerlo y volver al trabajo.fuente
Primero, encuentre el hash que desea que su submódulo haga referencia. entonces corre
eso me ha funcionado para que mi submódulo tenga la referencia hash correcta y continúe con mi trabajo sin tener más conflictos.
fuente
Tuve este problema con
git rebase -i origin/master
una rama. Quería tomar la versión maestra de la referencia del submódulo, así que simplemente hice:git reset master path/to/submodule
y entonces
git rebase --continue
Eso resolvió el problema para mí.
fuente
Obtuve ayuda de esta discusión. En mi caso el
trabajó para mi :)
fuente
Bueno, en mi directorio principal veo:
Así que acabo de hacer esto
fuente