Wie lösen Sie Git-Konflikte in yarn.lock?

79

Wenn mehrere Git-Zweige die Abhängigkeiten in einem Projekt ändern, das Yarn verwendet , führt dies wahrscheinlich zu einem Konflikt in der Datei yarn.lock. Es ist keine gute Idee, die Datei yarn.lock zu löschen und neu zu generieren, da dadurch wahrscheinlich mehrere Pakete unbeabsichtigt aktualisiert werden. Was ist der beste Weg, um Konflikte in dieser Datei schnell zu lösen?

Christian Schlensker
quelle

Antworten:

150

Seit Yarn 1.0 ist es einfach, da es Unterstützung für dieses Szenario eingebaut hat. Führen Sie einfach Folgendes aus:

$ yarn install

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

Jetzt musst du nur noch tun git add yarn.lock && git rebase --continue

Vanuan
quelle
1
Ich glaube nicht , das funktioniert , wenn es Konflikte in Ihren yarn.lockenthalten Codezeilen wie ============, >>>>>>>>>>>>>>, <<<<<<<<<<<<<. Sie müssen noch tun, worüber Christine Schlenskers Antwort spricht.
theGreenCabbage
41
@ theGreenCabbage glauben Sie es nicht, versuchen Sie es
Vanuan
Funktioniert nicht, wirfterror An unexpected error occurred: "Unknown token 7713:1 in /location
Saras Arya
Arbeitet für mich 16:23 $ yarn yarn install v1.7.0 info Merge conflict detected in yarn.lock and successfully merged.
Brian Di Palma
11
Sie müssen Ihre Konflikte in package.json zuerst beheben, dann Garn ausführen und es sollte damit umgehen
belgac
54

Ein guter Ansatz wird in dieser Github-Diskussion zu diesem Thema beschrieben.

git rebase origin/master

Wenn der erste Konflikt auftritt, checke ich das aus yarn.lockund führe die Installation erneut durch

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

Dies generiert eine neue yarn.lockVersion basierend auf der Origin / Master-Version von yarn.lock, jedoch einschließlich der Änderungen, die ich an meiner vorgenommen habe package.json. Dann geht es nur noch um:

git add yarn.lock
git rebase --continue
Christian Schlensker
quelle
Für diese und die akzeptierte Antwort muss ich die Befehle mehrmals wiederholen und git 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
Mein Fix endete mit diesen Schritten bei einer regelmäßigen Zusammenführung - es hat bei meiner Rebase nie funktioniert.
ADP
1

Anstelle von Rebase verwende ich ein ausführbares interaktives Bash-Skript , das nur abruftPipfile.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
quelle