قم بتغيير Git Remote HEAD للإشارة إلى شيء ما إلى جانب المعلم

StackOverflow https://stackoverflow.com/questions/1485578

  •  18-09-2019
  •  | 
  •  

سؤال

كيف أقوم بتعيين مرجع HEAD لجهاز التحكم عن بعد في Git للإشارة إلى شيء ما إلى جانب "الرئيسي"؟

يتضمن مشروعي سياسة عدم استخدام فرع "رئيسي" (جميع الفروع يجب أن يكون لها أسماء ذات معنى).علاوة على ذلك، لا يمكن الوصول إلى المستودع الرئيسي الأساسي إلا عبر ssh://، دون الوصول إلى Shell (مثل GitHub أو Unfuddle).

مشكلتي هي أن المستودع البعيد لا يزال يحتوي على مرجع HEAD إلى refs/heads/master، لكنني أحتاجه للإشارة إلى فرع مختلف.وهذا يسبب مشكلتين:

  1. عند استنساخ الريبو، هناك هذا،

    تحذير:يشير HEAD البعيد إلى مرجع غير موجود، وغير قادر على الخروج.

    هذا محير وغير مريح.

  2. يعتمد متصفح الكود المعتمد على الويب على HEAD كأساس لتصفح الشجرة.أحتاج إلى HEAD للإشارة إلى فرع صالح، إذن.

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

المحلول

كان هناك تقريبا نفس السؤال على جيثب قبل عام.

كانت الفكرة هي إعادة تسمية فرع الماجستير:

git branch -m master development
git branch -m published master
git push -f origin master 

جعل ماجستير لديه ما تريد استخدام الناس، والقيام بكل أعمال أخرى في الفروع.

(أ "git-symbolic-ref HEAD refs/head/published"لن يتم نشرها إلى Remote Repo)

هذا يشبه "كيف يمكنني حذف الأصل / ماجستير في جيت".


كما قال في ذلك هذا الموضوع: (التركيز لي)

"git clone"يخلق فقط فرع محلي واحد.
للقيام بذلك، يبدو في HEAD ref من Repo Repo، وإنشاء فرع محلي بنفس اسم الفرع البعيد المشار إليه بواسطة ذلك.

إذن لالتفاف ذلك، لديك Repo A ونسخه:

  • HEAD المراجع refs/heads/master وهذا موجود
    -> تحصل على فرع محلي يسمى ماستر، بدءا من الأصل / ماجستير

  • مراجع الرأس refs/heads/anotherBranch وهذا موجود
    -> تحصل على فرع محلي يسمى anotherBranch, ، بدءا من origin/anotherBranch

  • مراجع الرأس refs/heads/master وهذا غير موجود
    -> "استنساخ جيت" يشكو

لست متأكدا مما إذا كان هناك أي طريقة لتعديل مباشرة HEAD المرجع في الريبو.

(وهذا هو كل نقطة سؤالك، وأنا أعلم؛))


يمكن الطريقة الوحيدة ستكون "نشر للفقراء", ، حيث أنت:

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

ولكن من شأنه أن ينطوي على الوصول إلى الكتابة إلى الخادم، وهو أمر غير ممكن دائما.


كما أشرح في "git: الطريقة الصحيحة لتغيير فرع نشط في مستودع عاري؟", git remote set-head لن يغير أي شيء على الريبو عن بعد.

لن يغير فقط فرع التتبع عن بعد المخزنة محليا في Repo المحلي الخاص بك، في remotes/<name>/HEAD.

نصائح أخرى

تحديث: هذا يعمل فقط للنسخة المحلية من المستودع ("العميل"). يرجى الاطلاع على تعليقات الآخرين أدناه.

مع إصدار حديث من GIT (فبراير 2014)، سيكون الإجراء الصحيح:

git remote set-head $REMOTE_NAME $BRANCH

لذلك على سبيل المثال، تحول رأس الرأس على جهاز التحكم عن بعد origin لفرع develop سيكون:

git remote set-head origin develop

منذ أن ذكرت Github، للقيام بذلك على موقعها ببساطة الذهاب إلى مشروعك، ثم ...

admin > Default Branch > (choose something)

منجز.

يرى: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html.

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

الاستعمال:

$ git symbolic-ref HEAD refs/heads/<branch name>

(كان هناك بالفعل أساسا نفس السؤال "قم بإنشاء المرجع الرمزي GIT في مستودع عن بعد"، والتي لم تتلق أي إجابة عالمية.)

ولكن هناك إجابات محددة لمختلف "المزارع" (حيث يمكن للمستخدمين المتعددين إدارة REPOS GIT من خلال واجهة محظورة: عبر HTTP و SSH): http://github.com., http://gitorious.org., http://repo.or.cz., جرار (http://git.altlinux.org.).

قد تكون هذه الإجابات المحددة مفيدة لأولئك الذين يقرؤون هذه الصفحة والتفكير في هذه الخدمات المحددة.

إذا كان لديك إمكانية الوصول إلى Repo Repo من قذيفة، فما عليك سوى الدخول في .git (أو DIR الرئيسي إذا كان الريبو العاري) وتغيير ملف الرأس للإشارة إلى الرأس الصحيح. على سبيل المثال، بشكل افتراضي، فإنه يحتوي دائما على "Refs": Refs / heads / master '، ولكن إذا كنت بحاجة إلى أن يكون الرأس بدلا من ذلك، فما عليك سوى تحرير ملف الرأس وتغيير المحتويات إلى "Refs": Refs / Heads / Foo'.

يمكنك إنشاء منفصلة يتقن فرع يستخدم أوامر Git الخزفية فقط:

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

وهذا يعطينا أ يتقن فرع برسالة فظة (قد ترغب في أن تكون أكثر تهذيبًا).الآن نقوم بإنشاء فرعنا "الحقيقي" (دعنا نسميه صُندُوق تكريما لـ SVN) وطلاقها منه يتقن:

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

يا بريستو! جيتك --الكل سوف تظهر يتقن و صُندُوق مع عدم وجود رابط بينهما.

"السحر" هنا هو ذلك --يعدل الأسباب التزام بوابة لإنشاء التزام جديد مع نفس الأصل مثل HEAD الحالي، ثم اجعل HEAD يشير إليه.لكن الرأس الحالي لا يحتوي على أحد الوالدين لأنه الالتزام الأولي في المستودع، لذلك لا يحصل الرأس الجديد على أحد الوالدين أيضًا، مما يجعلهما منفصلين عن بعضهما البعض.

لا يتم حذف التزام HEAD القديم git-gc لأن المراجع/الرؤوس/الماجستير لا تزال تشير إليه.

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

في الحقيقة، يمكنك إنشاء فرع منفصل في أي وقت عن طريق تفرع الالتزام الأولي في المستودع، وحذف شجرته، وإضافة شجرتك المنفصلة، ​​ثم القيام بذلك git Commit --amend.

أعلم أن هذا لا يجيب على سؤال كيفية تعديل الفرع الافتراضي في المستودع البعيد، ولكنه يعطي إجابة واضحة حول كيفية إنشاء فرع منفصل.

أولا، قم بإنشاء الفرع الجديد الذي ترغب في تعيينه وهو الافتراضي الخاص بك، على سبيل المثال:

$>git branch main

بعد ذلك، دفع هذا الفرع إلى الأصل:

$>git push origin main

الآن عند تسجيل الدخول إلى حساب GitHub الخاص بك، يمكنك الذهاب إلى مستودعك واختر الإعدادات> الفرع الافتراضي واختر "رئيسي."

ثم، إذا اخترت ذلك، يمكنك حذف فرع Master:

$>git push origin :master

بالنسبة للأشخاص الجيتوليت، يدعم الجيتوليت أمر يسمى -- انتظر -- symbolic-ref.يسمح لك بتشغيل هذا الأمر عن بعد إذا كان لديك إذن W (الكتابة) إلى الريبو.

المتعلقة بالسؤال، انتهى بي الأمر هنا عند البحث عن:

كيف يمكنني إجراء إصدارات محلية على دراية بفرع افتراضي تم تغييره على Github

للاكتمال، إضافة الجواب:

git remote set-head origin -a

بسيط فقط تسجيل الدخول إلى حساب Github الخاص بك وعلى الجانب الأيمن الأقصى في قائمة التنقل إعدادات, ، في ال إعدادات الإعدادات يختار فرع الافتراضي والعودة إلى الصفحة الرئيسية لمستودعك الذي فعلت الخدعة بالنسبة لي.

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