¿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?

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


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

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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.