git fetch vs pull




Git إحضار فرع بعيد (16)

أسهل طريقة للقيام بذلك ، على الأقل بالنسبة لي:

git fetch origin <branchName>

أنا وزميلي نعمل على نفس المستودع ، وقمنا بتجميعه إلى فرعين ، كل منهما تقنيًا لمشاريع مختلفة ، ولكن لديهم أوجه تشابه ، لذا فإننا في بعض الأحيان نريد أن نلتزم بسيد * من الفرع.

ومع ذلك ، لدي فرع ، كيف يمكن أن يسحب زميلي هذا الفرع على وجه التحديد. لا يبدو أن git clone من الريبو يخلق الفروع محليا له ، على الرغم من أنني أستطيع رؤيتهم يعيشون على التباين بعد دفع نهايتي.

أيضا ، عندما قدمت في الأصل فرع لم أكن -b checkout . ألست متأكدًا مما إذا كان ذلك يحدث فرقًا كبيرًا؟

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

هذه هي الأوامر ركضت. لكن بالتأكيد لا يعمل. أريد أن أتمكن من التحقق من هذا الفرع ثم دفع واستجابة فقط تلك الفروع التغييرات من مختلف المتعاونين أو محطات العمل.


أمر بسيط - "git checkout remote_branch_name" سيساعدك على إنشاء فرع محلي يحتوي على جميع التغييرات في الفرع البعيد.


إذا كنت تحاول "الخروج" من فرع بعيد جديد (موجود فقط على جهاز التحكم عن بُعد وليس محليًا) ، فإليك ما ستحتاج إليه:

git fetch origin
git checkout --track origin/<remote_branch_name>

هذا يفترض أنك تريد الجلب من الأصل . إذا لم يكن الأمر كذلك ، فاستبدل الأصل باسمك البعيد .


إذا كنت تعرف بالفعل فرعك البعيد مثل ذلك ...

git remote
=> One
=> Two

وأنت تعرف اسم الفرع الذي ترغب في الخروج منه. br1.2.3.4 ثم القيام به

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

كل ما تبقى هو الخروج من الفرع

git checkout br.1.2.3.4

ثم جعل أي فروع جديدة الخروج منه.


ببساطة جرب

$ git pull origin your_branch_name


بهذا الأمر البسيط:

git checkout -b 'your_branch' origin/'remote branch'

تحقق من .git/config ، بشكل خاص ما هو التتبع الموجود في الجلب لجهاز التحكم عن بعد هذا.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

إذا كان يحتوي على heads/* تشير إلى randomRemote/* ، عند تشغيل git fetch randomRemote ، فسوف يجلب جميع الفروع. ثم يمكنك فقط التحقق من هذا الفرع.

غير ذلك،

  1. تحتاج إلى إضافة فروع عن بعد إلى التتبع باستخدام هذا. تحقق من .git/config بعد تشغيل هذا. سوف تفهم. git remote-set-branches - إضافة عشوائيةمنطقة عشوائية

  2. تشغيل git fetch randomRemote . هذا سيجلب الفرع البعيد.

  3. الآن يمكنك تشغيل git checkout randomBranch


دعنا نقول أن جهاز التحكم عن بعد الخاص بك هو [email protected] وتريد فرعه random_branch. يجب أن تكون العملية كما يلي:

  1. تحقق أولاً من قائمة أجهزة التحكم عن بعد الخاصة بك

    git remote -v

  2. إذا لم يكن لديك [email protected] عن بعد في إخراج الأمر السابق ، فيمكنك إضافته بواسطة

    git remote add xyz [email protected]

  3. الآن يمكنك إحضار محتويات جهاز التحكم عن بعد بواسطة

    git fetch xyz

  4. الآن الخروج فرع هذا بعيد عن طريق

    git checkout -b my_copy_random_branch xyz/random_branch

  5. تحقق من قائمة الفرع بواسطة

    git branch -a

سيقوم الفرع المحلي my_copy_random_branch بتتبع فرع random_branch الخاص بك عن بعد.


كتبت

git checkout <branch_name>

وحصلت

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'

لقد استخدمت fetch تلتها عملية checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... حيث <rbranch> هو الفرع البعيد أو المرجع المصدر و <lbranch> هو الفرع المحلي أو وجهة الوجهة غير الموجودة حتى الآن والتي تريد تتبعها والتي ربما تريد تسمية نفس الفرع البعيد أو المرجع المصدر . هذا موضح تحت options في شرح <refspec> .

Git ذكية للغاية ، حيث يكمل Auto الأمر الأول إذا قمت بتبويب بعد الأحرف القليلة الأولى من الفرع البعيد. IE: ليس لدي حتى اسم الفرع المحلي ، جيت تلقائيا بنسخ اسم الفرع البعيد بالنسبة لي. شكرا جيت!

كما تظهر الإجابة في مشاركة SO المماثلة ، إذا لم تذكر الفرع المحلي في fetch ، فلا يزال بإمكانك إنشائه عند التحقق من ذلك باستخدام علامة -b . IE: git fetch <remote> <branch> متبوعًا git checkout -b <branch> <remote>/<branch> يفعل بالضبط نفس إجابتي الأولية. ومن الواضح إذا كان الريبو الخاص بك يحتوي على جهاز تحكم عن بعد واحد فقط ، فيمكنك فقط القيام بـ git checkout <branch> بعد fetch وسيقوم بإنشاء فرع محلي لك. EG: أنت فقط استنسعت ريبو وتريد التحقق من فروع إضافية من جهاز التحكم عن بعد.

أعتقد أن بعض مستندات fetch قد تم نسخها حرفيًا من pull . على وجه الخصوص ، القسم في <refspec> في options هو نفسه. ومع ذلك ، لا أعتقد أن عملية fetch merge أبدًا ، بحيث إذا لم تترك الجانب المقصود من القولون فإن fetch الفارغ يجب أن لا يفعل شيئًا .

ملاحظة: أن git fetch <remote> <refspec> قصير للحصول على git fetch <remote> <refspec>: مما يعني عدم القيام بأي شيء ، ولكن git fetch <remote> <tag> هو نفس git fetch <remote> <tag>:<tag> التي يجب أن تنسخ <tag> remote <tag> محليًا.

أعتقد أن هذا مفيد فقط إذا كنت تريد نسخ فرع بعيد محليًا ، ولكن ليس بالضرورة أن تتحقق منه على الفور. وبخلاف ذلك ، --track الآن الإجابة المقبولة أعلاه ، والتي يتم شرحها بالتفصيل في القسم الأول من وصف الخروج ، ثم في قسم options لاحقًا تحت شرح - --track ، نظرًا لأنها 1-liner. حسنا ... نوع من 1-الخطوط الملاحية المنتظمة ، لأنه لا يزال يتعين عليك تشغيل git fetch <remote> أولاً.

لمعلوماتك: يوضح ترتيب <refspecs> (المصدر: الوجهة) أسلوب Git-1.7 الغريب لحذف الفروع البعيدة . IE: دفع أي شيء في وجهة refspec.


والخطوات هي كما يلي؛

  1. git fetch origin أو git fetch --all ، سيؤدي ذلك إلى جلب جميع الفروع البعيدة إلى موقعك المحلي ثم هذا هو الخيار الثاني الذي يمكنك إجراؤه.

  2. git checkout --track origin/<The_remote_branch you want to switch over>

ثم اعمل على هذا الفرع ويمكنك التحقق مما إذا كنت في هذا الفرع أم لا عن طريق الكتابة

git branch

يعرض الفرع الذي تتواجد فيه حاليًا.


يمكنك إحضار والخروج من الفرع البعيد في لقطة واحدة أيضًا: -

git fetch && git checkout the-branch-name

git branch <name> --track origin/<name>


git fetch && git checkout <your friend's branch name> يجب أن تفعل الحيلة


يتم الخلط بين العنوان والسؤال:

  • Git إحضار فرع بعيد
  • كيف يمكن أن يسحب زميلي هذا الفرع على وجه التحديد.

إذا كان السؤال هو كيف يمكنني الحصول على فرع بعيد للعمل مع أو كيفية الحصول على الخروج فرع بعيد ، فإن الحل الأبسط هو:

باستخدام git (> = 1.6.6) ، يمكنك استخدام:

git checkout <branch_name>

إذا لم يتم العثور على <branch_name> محلي ولكن يوجد فرع تتبع في جهاز تحكم عن بُعد واحد تمامًا يحمل اسمًا مطابقًا ، فاستعامل على أنه مكافئ لما يلي:

git checkout -b <branch_name> --track <remote>/<branch_name>

checkout

لصديقك:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

git checkout -b serverfix origin/serverfix

هذه هي عملية شائعة بما فيه الكفاية أن git يوفر الاختزال - المسار:

git checkout --track origin/serverfix

في الواقع ، من الشائع جدًا أن يكون هناك اختصار لهذا الاختصار. إذا كان اسم الفرع الذي تحاول الخروج منه (a) غير موجود و (b) يطابق تمامًا اسمًا على جهاز تحكم عن بُعد واحد فقط ، فسيقوم Git بإنشاء فرع تتبع لك:

git checkout serverfix

لإعداد فرع محلي باسم مختلف عن الفرع البعيد ، يمكنك بسهولة استخدام الإصدار الأول باسم فرع محلي مختلف:

git checkout -b sf origin/serverfix

الآن ، سيتم سحب sf فرعك المحلي تلقائيًا من المنشأ / serverfix.

المصدر: برو غيت الطبعة الثانية ، كتبه سكوت تشاكون وبن شتراوب (قص للقراءة)







git-fetch