الاختلافات بين التحديث عن بعد git وجلب؟
-
13-09-2019 - |
سؤال
هو 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
يمكن أن يكون أكثر حبيبية.