لا لا ينبغي. الملف عبارة عن نص عادي ويمكن أن يكون هناك تعارضات دمج في الملف قد تحتاج إلى حلها.
في الوثائق مكتوب أنه لا ينبغي لمس ملف yarn.lock لتجنب المشاكل ويجب أن يتعامل معه الغزل نفسه فقط. ثم كيف يمكنني حل تعارض الدمج؟
@ kittens هو الشيء الصحيح الذي يجب فعله عند وجود تعارضات لتفجير ملف القفل وإعادة تشغيل الغزل؟ يبدو لي أنه سيحصل على ما تحتاجه؟
dbashford ، المشكلة في yarn upgrade
.
dbashford فمن الأسهل وضع الغزل. ملف القفل في gitignore
النهج الذي نجح معي حتى الآن هو:
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 قد دمج نسختين من ملف yarn.lock بطريقة تؤدي إلى ملف صالح / صحيح؟ يبدو من الخطأ السماح لـ git بتحديث محتويات الملف على الإطلاق إذا كانت الغزل هي الأداة الوحيدة التي من المفترض أن تدير محتواها.
لست متأكدًا من أن التشغيل التلقائي لـ YAML سيؤدي دائمًا إلى ملف صالح ، لا سيما في ضوء:
readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
dependencies:
buffer-shims "^1.0.0"
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
readable-stream@~2.1.4:
version "2.1.5"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
dependencies:
buffer-shims "^1.0.0"
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
IanVS شكرا على الإرشادات التفصيلية! لكن قلقidris لا يزال ينطبق على هذا الحل. سينتهي بك الأمر بترقية الكثير من التبعيات الخاصة بك بهذه الطريقة ، والتي قد تكون غير متوقعة.
@ danny-andrews هل يمكن أن تشرح كيف؟
عند مسح yarn.lock
وإعادة تشغيل yarn install
، تتم إعادة بناء yarn.lock
بالكامل بأحدث إصدارات التبعيات التي تلبي نطاقات الإصدارات المحددة في package.json
، بشكل فعال ترقية أي تبعية تغيرت منذ آخر تشغيل yarn install
.
لهذا السبب اقترحت git checkout origin/master -- yarn.lock
بدلاً من حذف yarn.lock
. سيؤدي ذلك إلى إعادة تعيين yarn.lock
إلى الإصدار الرئيسي ، مما يسمح لـ yarn install
بتحديث الحزم التي تم تغييرها فقط في package.json
(و الأقسام الفرعية ، بالطبع) .
IanVS نعم ، هذه هي الطريقة الصحيحة للقيام بذلك.
على الرغم من أنني أوصي بـ git checkout -- yarn.lock
، وهو أكثر عمومية ويعيد تعيينه إلى كل ما تم الالتزام به في فرعك الحالي.
نقطة جيدة ،idris. عادةً ما أعيد تأسيس قاعدة البيانات الرئيسية ، وهو المثال الذي استخدمته أعلاه ، ولكن هذا لن يكون هو الحال دائمًا.
IanVS لم أفهم ما فعله هذا الأمر. هذا أفضل بكثير من نسخ ولصق yarn.lock
يدويًا كما كنت أفعل. شكرا للمشاركة!
هذا مرتبط: # 3544
ألا يتوافق أسلوبIanVS مع جعل ملف القفل ملفًا ثنائيًا؟ إذا فهمت بشكل صحيح أن الفكرة هي عدم الدمج مطلقًا ، فما عليك سوى التخلص من ما لديك وإعادة تشغيل yarn install
فوق كل ما هو yarn.lock
موجود بالفعل في الفرع الذي تدمج فيه.
هذا هو أسلوبي لإضافة نص باش
#!/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"
التعليق الأكثر فائدة
النهج الذي نجح معي حتى الآن هو:
عندما يظهر التعارض الأول ، أقوم بسحب
yarn.lock
ثم أعد إجراء التثبيتيؤدي هذا إلى إنشاء
yarn.lock
جديدًا استنادًا إلى الإصدار الأصلي / الرئيسي لـyarn.lock
، ولكن بما في ذلك التغييرات التي أجريتها علىpackage.json
. إذن فالأمر يتعلق فقط بما يلي:لقد عدت إلى العمل.