سؤال

هو git remote update أي ما يعادل git fetch?

هل كانت مفيدة؟

المحلول

تحديث: مزيد من المعلومات!

كان يجب أن أفعل ذلك من البداية: لقد اختتحت ملاحظات الافراج عن جيت في جيت ريبو جيت (ميتا!)

grep --color=always -R -C30 fetch Documentation/RelNotes/* | less

ثم فعلت less البحث عن --all, وهذا ما وجدته تحت ملاحظات الإصدار للإصدار GIT 1.6.6:

git fetch تعلمت --all و --multiple خيارات، لتشغيل جلب من العديد من المستودعات، و --prune خيار لإزالة فروع تتبع عن بعد التي ذهبت لا معنى لها. هذه صنع git remote update و git remote prune أقل ضرورة (لا توجد خطة لإزالة remote update ولا remote prune, ، رغم ذلك).

الإصدار 1.6.6 لم يتم إصداره حتى 23 ديسمبر 2009, ، طلب المشارك الأصلي سؤاله في 6 ديسمبر 2009.

حتى تتمكن من رؤية ملاحظات الإصدار، كان مؤلفي جيت يدركون حقيقة أن git remote update تم تكرار وظائف القيادة إلى حد ما git fetch, ، لكنهم قرروا عدم إزالته، ربما للتوافق مع البرامج النصية والبرامج الموجودة، أو ربما لأنها مجرد الكثير من العمل وهناك عناصر ذات أولوية أعلى.


الإجابة الأصلية مع مزيد من التفاصيل

إجابة Xenoterracide يبلغ من العمر 3.5 عاما، وقد مر الجنود من خلال العديد من الإصدارات منذ ذلك الحين (لقد ذهب من v1.6.5.5. إلى V1.8.3.2 اعتبارا من هذه الكتابة)، والنظر إلى تيار وثائق ل git remote update و git fetch, ، يبدو أنهم كلاهما يمكن أن يؤدي أساسا نفس وظيفة جلب ارتكاب جديد من أجهزة التحكم عن بعد, بالنظر إلى الخيارات والحجج الصحيحة.

جلب جميع أجهزة التحكم عن بعد

طريقة واحدة لجلب أجهزة التحكم عن بعد مع --all علَم:

git fetch --all

سيحصل ذلك من جميع أجهزة التحكم عن بعد تكوينه، على افتراض أنك لا تملك remote.<name>.skipFetchAll تعيين لهم:

إذا كان هذا صحيحا، فسيتم تخطي هذا عن بعد افتراضيا عند تحديث الاستخدام جيت جبن (1) أو تحديث اللجنة الفرعية جيت النائية (1). — وثائق جيت التكوين

هذا سيكون يعادل استخدام

git remote update

دون تحديد أي مجموعة عن بعد لجلب، وكذلك عدم وجود remotes.default تعيين في تكوين Repo الخاص بك، وكذلك أي من عجلاتك لديها remote.<name>.skipDefaultUpdate تعيين إلى True.

ال 1.8.3.2 الحالية توثيق تكوين GIT لا يذكر ذلك remotes.default الإعداد، لكنني استشارت جوجل سبحانه وتعالى عن ذلك ووجدت هذا التفسير المفيد من ميسلاف مارنيتش:

$ git config remotes.default 'origin mislav staging'
$ git remote update

# fetches remotes "origin", "mislav", and "staging"

يمكنك تحديد قائمة بيانات افتراضية ليتم إحضارها بواسطة remote update أمر. هذه يمكن أن تكون أجهزة التحكم عن بعد من زملائك في الفريق، وأفراد المجتمع الموثوق بهم في مشروع OpenSource، أو ما شابه ذلك.

من المفترض أنه إذا كان لديك remotes.default تعيين، وليس كل أجهزة التحكم عن بعد مدرجة في ذلك، ثم git remote update لن يجلب جميع أجهزة التحكم عن بعد أن ريبو الخاص بك هو "علم".

أما بالنسبة لل remote.<name>.skipDefaultUpdate إعداد، مستندات git. اشرح ذلك

إذا كان هذا صحيحا، فسيتم تخطي هذا عن بعد افتراضيا عند تحديث الاستخدام جيت جبن (1) أو تحديث اللجنة الفرعية جيت النائية (1).

جلب مجموعة محددة من أجهزة التحكم عن بعد

بدلا من جلب جميع أجهزة التحكم عن بعد، كلاهما fetch و remote update اسمح لك بتحديد المزيد من أجهزة التحكم عن بعد ومجموعات من أجهزة التحكم عن بعد لجلب:

git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]

git fetch [<options>] <group> يسمح لك بإحضار أجهزة التحكم عن بعد تعد جزءا من مجموعة (لاستعارة مثال آخر mislav):

$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup

git fetch --multiple يسمح لك بتحديد العديد من المستودعات ومجموعات مستودع لإحضارها مرة واحدة (من المستندات):

السماح لعدة <repository> و <group> الحجج التي سيتم تحديدها. لا <refspec>s قد تكون محددة.

الغموض في git remote update توثيق

ال ملخص ل git remote update يحدد أن بناء جملة الأمر كما يلي:

git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]

لاحظ الجزء الأخير، [(<group> | <remote>)…]ب النقاط الزائدة ... يعني أنه يمكنك تحديد مجموعات متعددة ومكثرات مع الأمر، مما يعني أنه يتصرف بنفس الطريقة git fetch --multiple... انظر كيف يوجد بناء الجملة بين الاثنين متشابهة جدا؟

ومع ذلك، في نفس المستند، التفسير ل update يقول الأمر شيئا عن تحديد مجموعة متعددة وحجج عن بعد، فقط

جلب [ES] تحديثات لمجموعة عين من أجهزة التحكم عن بعد في المستودع كما هو محدد remotes.<group>.

لذلك من غير الواضح إذا git remote update يعمل متطابقة ل git fetch --multiple فيما يتعلق بتحديد المزيد من أجهزة التحكم عن بعد فردية ومجموعات بعيدة عن بعد.

جلب بعيد واحد

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

git fetch <remote>

قد يكون الأمر كذلك أنه يمكنك أيضا استخدامه

git remote update <remote>

أن تفعل الشيء نفسه، ولكن كما ذكرت في القسم السابق، وثائق git remote update غير واضح حول ما إذا كان من الممكن جلب أي شيء آخر غير واحد مجموعة من أجهزة التحكم عن بعد مع الأمر.

يتم إحتوائه

كما شرحت، git fetch و git remote update تتصرف بالمثل فيما يتعلق بسحب من أجهزة التحكم عن بعد. يشاركون بناء جملة مماثلة وجدات مماثلة، رغم ذلك git fetch أقصر، لذلك من المحتمل أن يجد الناس أنه من الأسهل اكتب واستخدامه.

قد يكون الأمر كذلك git remote update لا يمكن استخدامها لجلب فقط بعيد عن بعد مع git fetch, ، ولكن كما أشرت، فإن الوثائق لا تجعل هذا واضح.

جانبا

الازدواجية في الوظيفة بين أوامر البورسلين جيت، مثبتة git fetch و git remote update أعلاه، ليست فريدة من نوعها. لقد لاحظت وضعا مشابها git rebase --onto و git cherry-pick, ، في كل من كلاهما يمكن أن يأخذ مجموعة من الالتزام إلى التصحيح على ارتكاب قاعدة جديدة.

أعتقد أنه نظرا لأن GIT تطورت على مر السنين، كانت بعض الوظائف (حتما؟) مكررة، ربما في بعض الأحيان كملاحظة للمستخدمين النهائيين (على سبيل المثال، أصبح أكثر بساطة لتمرير مجموعة إلى cherry-pick, ، من اجتياز ارتكاب واحد مرارا وتكرارا لاختيار مجموعة). فيما يبدو cherry-pick لم يقبل دائما مجموعة من الالتزام، كما هو موضح في V1.7.2 الإصدار ملاحظات:

git cherry-pick تعلمت اختيار مجموعة من ارتكاب (على سبيل المثال cherry-pick A..B و cherry-pick --stdin)، لذلك فعلت git revert; ؛ هذه لا تدعم التحكم في تسلسل ألمنر rebase [-i] لديه، رغم ذلك.

نصائح أخرى

نعم و لا. git remote update الجمل من جميع أجهزة التحكم عن بعد، وليس فقط واحد.

دون النظر إلى التعليمات البرمجية لمعرفة ما إذا كان remote update هو مجرد برنامج نصي شل (ممكن)، يعمل بشكل أساسي، جلب لكل جهاز التحكم عن بعد. git fetch يمكن أن يكون أكثر حبيبية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top