¿Cómo se resuelven los conflictos de git en yarn.lock?

80

Cuando varias ramas de git modifican las dependencias en un proyecto que usa Yarn , es probable que se produzca un conflicto en el archivo yarn.lock. No es una buena idea eliminar y regenerar el archivo yarn.lock porque esto probablemente hará que varios paquetes se actualicen involuntariamente. ¿Cuál es la mejor manera de resolver rápidamente los conflictos en este archivo?

Christian Schlensker
fuente

Respuestas:

157

Desde Yarn 1.0 es fácil porque ha incorporado soporte para este escenario. Solo ejecuta esto:

$ yarn install

yarn install v1.0.1
info Merge conflict detected in yarn.lock and successfully merged.
[1/4] Resolving packages...

Ahora solo tienes que hacer git add yarn.lock && git rebase --continue

Vanuan
fuente
1
No creo que esto funciona si hay conflictos en sus yarn.locklíneas que contienen de código tales como ============, >>>>>>>>>>>>>>, <<<<<<<<<<<<<. Aún debe hacer lo que dice la respuesta de Christine Schlensker.
theGreenCabbage
42
@theGreenCabbage no lo crea, pruébelo
Vanuan
No funciona, lanzaerror An unexpected error occurred: "Unknown token 7713:1 in /location
Saras Arya
Funciona para mí 16:23 $ yarn yarn install v1.7.0 info Merge conflict detected in yarn.lock and successfully merged.
Brian Di Palma
12
primero debe solucionar sus conflictos en package.json, luego ejecute yarn y debería manejarlo
belgac
55

Un buen enfoque se detalla en esta discusión de github sobre el tema.

git rebase origin/master

Cuando surge el primer conflicto, reviso y yarn.lockluego vuelvo a realizar la instalación

git checkout origin/master -- yarn.lock 
yarn install

Esto genera un nuevo yarn.lockbasado en la versión original / maestra de yarn.lock, pero incluyendo los cambios que hice en my package.json. Entonces es solo una cuestión de:

git add yarn.lock
git rebase --continue
Christian Schlensker
fuente
Para esto y la respuesta aceptada, tengo que repetir los comandos varias veces y git termina con lo siguiente: No changes - did you forget to use 'git add'? If there is nothing left to stage, chances are that something else already introduced the same changes; you might want to skip this patch.
ADP
Mi solución terminó siendo estos pasos en una combinación regular: nunca funcionó en mi rebase.
ADP
1

En lugar de rebase, uso un script bash interactivo ejecutable , que solo obtienePipfile.lock Pipfile

#!/usr/bin/env bash
export GIT_TRACE=1
git checkout origin/master -- Pipfile.lock Pipfile
git commit -m "fetch to branch Pipfile.lock, Pipfile from origin/master" -- Pipfile.lock Pipfile
read  -n 1 -p "Do your changes in Pipfile and press Enter ..."
pipenv lock --clear
git commit -m "re-apply changes to Pipfile.lock, Pipfile" -- Pipfile.lock Pipfile
echo "Done"
pymen
fuente