Yarn: هل يجب معاملة yarn.lock كملف ثنائي في git؟

تم إنشاؤها على ١٠ نوفمبر ٢٠١٦  ·  19تعليقات  ·  مصدر: yarnpkg/yarn

التعليق الأكثر فائدة

النهج الذي نجح معي حتى الآن هو:

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

لقد عدت إلى العمل.

ال 19 كومينتر

لا لا ينبغي. الملف عبارة عن نص عادي ويمكن أن يكون هناك تعارضات دمج في الملف قد تحتاج إلى حلها.

في الوثائق مكتوب أنه لا ينبغي لمس ملف 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"

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات