شخص سخيف:ما هو جهاز التحكم عن بعد الذي تم تكوينه افتراضيًا للفرع؟
-
27-10-2019 - |
سؤال
لدي مستودع بعيد hub
.أنا أعمل فقط في master
فرع.الجملة الأخيرة من رسالة الخطأ هذه تجعلني أتساءل:كيف أعرف ما هو "جهاز التحكم عن بعد الذي تم تكوينه افتراضيًا لفرعك الحالي"؟وكيف أقوم بإعداده؟
[myserver]~/progs $ git remote -v
hub ~/sitehub/progs.git/ (fetch)
hub ~/sitehub/progs.git/ (push)
[myserver]~/progs $ git branch -r
hub/master
[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master
[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
المحلول
تتبع الفرع البعيد
يمكنك تحديد المستودع الافتراضي البعيد للدفع والسحب باستخدام خيار مسار git-branch.يمكنك القيام بذلك عادةً عن طريق تحديد خيار --track عند إنشاء فرعك الرئيسي المحلي، ولكن بما أنه موجود بالفعل، فسنقوم فقط بتحديث التكوين يدويًا كما يلي:
تحرير الخاص بك .git/config
[branch "master"]
remote = origin
merge = refs/heads/master
الآن يمكنك ببساطة git Push و git pull.
[مصدر]
نصائح أخرى
يمكنك القيام بذلك بشكل أكثر بساطة، مما يضمن أن لديك .gitconfig
يتم تركه في حالة ذات معنى:
استخدام إصدار Git v1.8.0 وما فوق
git push -u hub master
عند الدفع، أو:
git branch -u hub/master
أو
(سيؤدي هذا إلى ضبط جهاز التحكم عن بعد لـ فرع الخروج حاليا ل hub/master
)
git branch --set-upstream-to hub/master
أو
(سيؤدي هذا إلى ضبط جهاز التحكم عن بعد للفرع المسمى branch_name
ل hub/master
)
git branch branch_name --set-upstream-to hub/master
إذا كنت تستخدم v1.7.x
أو في وقت سابق
عليك أن تستعمل --set-upstream
:
git branch --set-upstream master hub/master
من أجل الإنتهاء:الإجابات السابقة توضح كيفية تعيين الفرع الرئيسي، ولكن ليس كيفية رؤيته.
هناك بضعة طرق لفعل هذا:
git branch -vv
يظهر تلك المعلومات لجميع الفروع.(منسق باللون الأزرق في معظم المحطات الطرفية)
cat .git/config
يظهر هذا أيضا.
كمرجع:
الأمر للحصول على جهاز التحكم عن بعد الفعال للفرع، على سبيل المثال، master، هو:
git config branch.master.pushremote || git config remote.pushdefault || git config branch.master.remote
إليك السبب (من إخراج "man git config"):
Branch.name.remote [...] يخبر git fetch و git Push الذي قد يتم تجاوز جهاز التحكم عن بعد الذي سيتم جلبه من/الدفع إلى [...] [للدفع] Remote.pushDefault (لجميع الفروع) [و] للفرع الحالي [..] تم تجاوزه أيضًا Branch.name.pushRemote [...]
لسبب ما، يخبرنا "man git Push" فقط عن Branch.name.remote (على الرغم من أنه يتمتع بأقل الأسبقية من بين الثلاثة) + ينص بشكل خاطئ على أنه إذا لم يتم تعيينه، فادفع الإعدادات الافتراضية إلى الأصل - لا يحدث ذلك، إنه مجرد أنه عند استنساخ الريبو، يتم تعيين Branch.name.remote على الأصل، ولكن إذا قمت بإزالة هذا الإعداد، فسوف يفشل git Push، على الرغم من أنه لا يزال لديك الأصل البعيد