Як ви вирішуєте конфлікти git в yarn.lock


80

Коли кілька гілок git модифікують залежності в проекті, який використовує Yarn , швидше за все, виникне конфлікт у файлі yarn.lock. Не рекомендується видаляти та регенерувати файл yarn.lock, оскільки це, ймовірно, призведе до ненавмисного оновлення декількох пакетів. Який найкращий спосіб швидко вирішити конфлікти у цьому файлі?

Відповіді:


157

З Yarn 1.0 це легко, оскільки він вбудував підтримку для цього сценарію. Просто запустіть це:

$ yarn install

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

Тепер вам залишається лише зробити git add yarn.lock && git rebase --continue


1
Я не вважаю , що це працює , якщо є проблеми в ваших yarn.lockмістять рядках коди , такі як ============, >>>>>>>>>>>>>>, <<<<<<<<<<<<<. Вам все одно потрібно робити те, про що говорить відповідь Крістін Шленскер.
theGreenCabbage

42
@theGreenCabbage не вірю, спробуй
Вануан

Не працює, кидаєerror An unexpected error occurred: "Unknown token 7713:1 in /location
Saras Arya 02

Працює для мене 16:23 $ yarn yarn install v1.7.0 info Merge conflict detected in yarn.lock and successfully merged.
Брайан Ді Пальма

12
вам потрібно спочатку виправити свої конфлікти в package.json, потім запустити пряжу, і вона повинна це обробити
belgac

55

Хороший підхід докладно викладено у цій дискусії github щодо проблеми.

git rebase origin/master

Коли виникає перший конфлікт, я перевіряю, а yarn.lockпотім повторюю встановлення

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

Це генерує нову yarn.lockна основі початкової / основної версії yarn.lock, але включаючи зміни, які я вніс у свою package.json. Тоді справа лише в:

git add yarn.lock
git rebase --continue

Для цієї та прийнятої відповіді я повинен повторити команди кілька разів, і 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

Моє виправлення закінчилося такими кроками під час звичайного злиття - воно ніколи не працювало на моєму перебазуванні.
ADP

1

Замість rebase я використовую виконуваний інтерактивний скрипт bash , який отримує лишеPipfile.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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.