قم بتغيير Git Remote HEAD للإشارة إلى شيء ما إلى جانب المعلم
-
18-09-2019 - |
سؤال
كيف أقوم بتعيين مرجع HEAD لجهاز التحكم عن بعد في Git للإشارة إلى شيء ما إلى جانب "الرئيسي"؟
يتضمن مشروعي سياسة عدم استخدام فرع "رئيسي" (جميع الفروع يجب أن يكون لها أسماء ذات معنى).علاوة على ذلك، لا يمكن الوصول إلى المستودع الرئيسي الأساسي إلا عبر ssh://، دون الوصول إلى Shell (مثل GitHub أو Unfuddle).
مشكلتي هي أن المستودع البعيد لا يزال يحتوي على مرجع HEAD إلى refs/heads/master، لكنني أحتاجه للإشارة إلى فرع مختلف.وهذا يسبب مشكلتين:
عند استنساخ الريبو، هناك هذا،
تحذير:يشير HEAD البعيد إلى مرجع غير موجود، وغير قادر على الخروج.
هذا محير وغير مريح.
يعتمد متصفح الكود المعتمد على الويب على 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.).
قد تكون هذه الإجابات المحددة مفيدة لأولئك الذين يقرؤون هذه الصفحة والتفكير في هذه الخدمات المحددة.
- الآن لديهم قائمة منسدلة لاختيار فرع الرأس في http://repo.or.cz. (مثال: http://repo.or.cz/editproj.cgi؟name=for-me-and-for-all_imz.git.);
- واو http://gitorious.org., أيضا (انظروا إلى مكان ما في الإعدادات)؛
- واو http://github.com.: ADMIN> فرع الافتراضي> (اختر شيئا) (بفضل إجابة @ srcspider)؛
- حيث v2.6., ، يمكن تعيين الفرع الافتراضي في واجهة الويب تحت "المشروعات"> القائمة ">>" الفروع ". وبعد في V2.12، جيريت إضافة أمر مجموعة جديدة هذا يمكن أن يكون تستخدم أكثر من ssh..
- و في جرار (يعمل على http://git.altlinux.org. لبناء حزم ل Distro)، يمكن للمرء أن الواجهة SSH لهذا:
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
علي سبيل المثالssh git.alt default-branch packages/autosshd.git sisyphus
لتغيير الرأس في Repo Repoautosshd.git
للإشارة إلىsisyphus
فرع شجرة.
إذا كان لديك إمكانية الوصول إلى 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 الخاص بك وعلى الجانب الأيمن الأقصى في قائمة التنقل إعدادات, ، في ال إعدادات الإعدادات يختار فرع الافتراضي والعودة إلى الصفحة الرئيسية لمستودعك الذي فعلت الخدعة بالنسبة لي.