كيف يمكنني العثور على موقع الأصل/الرئيسي في بوابة، وكيف يمكنني تغييره؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

أنا مبتدئ جيت.لقد قمت مؤخرًا بنقل مشروع Rails من Subversion إلى Git.لقد تابعت البرنامج التعليمي هنا: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

أنا أستخدم أيضًا موقع unfuddle.com لتخزين الكود الخاص بي.أقوم بإجراء تغييرات على كمبيوتر Mac المحمول الخاص بي في القطار من/إلى العمل ثم أدفعها للتفكيك عندما يكون لدي اتصال بالشبكة باستخدام الأمر التالي:

git push unfuddle master

أستخدم Capistrano لعمليات النشر وسحب الكود من مستودع التفكيك باستخدام الفرع الرئيسي.

لقد لاحظت مؤخرًا الرسالة التالية عندما أقوم بتشغيل "حالة git" على الكمبيوتر المحمول الخاص بي:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

وأنا في حيرة من أمري لماذا.اعتقدت أن جهاز الكمبيوتر المحمول الخاص بي هو الأصل ...لكن لا أعرف ما إذا كانت حقيقة أنني قمت بالانسحاب في الأصل من Subversion أو الضغط على Unfuddle هي سبب ظهور الرسالة.كيف يمكنني:

  1. اكتشف أين يعتقد Git أن "الأصل/الرئيس" هو؟
  2. إذا كان في مكان آخر، كيف يمكنني تحويل جهاز الكمبيوتر المحمول الخاص بي إلى "Origin/Master"؟
  3. الحصول على هذه الرسالة للذهاب بعيدا.هذا يجعلني أعتقد أن Git غير سعيد بشيء ما.

يعمل جهاز Mac الخاص بي بإصدار Git 1.6.0.1.


عندما أركض git remote show origin كما اقترح dbr، أحصل على ما يلي:

~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

عندما أركض git remote -v كما اقترح أرسطو باجالتزيس، أحصل على ما يلي:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

ومن المثير للاهتمام الآن أنني أعمل على مشروعي في geekfor الدليل ولكنه يقول أن أصل هو جهازي المحلي في ملف gf الدليل.أعتقد gf كان هو الدليل المؤقت الذي استخدمته عند تحويل مشروعي من Subversion إلى Git وربما هو المكان الذي دفعته للتفكيك منه.ثم أعتقد أنني قمت بسحب نسخة جديدة من Unfuddle إلى geekfor الدليل.

لذا يبدو أنني يجب أن أتبع نصيحة dbr وأقوم بما يلي:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
هل كانت مفيدة؟

المحلول

1. اكتشف المكان الذي يعتقد Git أن "الأصل/الرئيسي" يستخدمه git-remote

git remote show origin

..والتي سوف يعود شيء من هذا القبيل..

* remote origin
  URL: me@remote.example.com:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

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

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..git سيدفع التغييرات إلى هذا العنوان الذي أضفته.إنها مثل إشارة مرجعية للمستودعات البعيدة.

عند تشغيل git status, ، فإنه يتحقق مما إذا كان جهاز التحكم عن بعد يفتقد الالتزامات (مقارنة بمستودعك المحلي)، وإذا كان الأمر كذلك، فمن خلال عدد الالتزامات.إذا دفعت جميع تغييراتك إلى "الأصل"، فسيكون كلاهما متزامنين، لذلك لن تتلقى هذه الرسالة.

2. إذا كان في مكان آخر، كيف يمكنني تحويل جهاز الكمبيوتر المحمول الخاص بي إلى "Origin/Master"؟

ليس هناك فائدة من القيام بذلك.لنفترض أنه تمت إعادة تسمية "Origin" إلى "كمبيوتر محمول" - فلن ترغب في القيام بذلك أبدًا git push laptop من الكمبيوتر المحمول الخاص بك.

إذا أردت إزالة الأصل عن بعد فافعل..

git remote rm origin

لن يؤدي هذا إلى حذف أي شيء (من حيث محتوى الملف/سجل المراجعات).سيؤدي هذا إلى إيقاف رسالة "فرعك متقدم بـ.."، حيث لن يقوم بعد ذلك بمقارنة مستودعك بجهاز التحكم عن بعد (لأنه اختفى!)

شيء واحد يجب تذكره هو أنه لا يوجد شيء خاص به origin, ، إنه مجرد اسم افتراضي يستخدمه git.

بوابة لا تستخدم origin بشكل افتراضي عندما تفعل أشياء مثل git push أو git pull.لذا، إذا كان لديك جهاز تحكم عن بعد وتستخدمه كثيرًا (Unfuddle، في حالتك)، فإنني أوصي بإضافة unfuddle كـ "origin":

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

أو قم بما ورد أعلاه في أمر واحد باستخدام set-url:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

ثم يمكنك أن تفعل ببساطة git push أو git pull للتحديث، بدلا من git push unfuddle master

نصائح أخرى

جئت إلى هذا السؤال بحثًا عن شرح لما تعنيه الرسالة "فرعك متقدم بـ..." في المخطط العام لـ git.لم تكن هناك إجابة على ذلك هنا، ولكن نظرًا لأن هذا السؤال يظهر حاليًا في الجزء العلوي من محرك البحث Google عند البحث عن العبارة "فرعك متقدم على 'Origin/master'"، ولقد اكتشفت منذ ذلك الحين المعنى الحقيقي للرسالة ، اعتقدت أنني سأنشر المعلومات هنا.

لذا، كوني مبتدئًا في git، أستطيع أن أرى أن الإجابة التي أحتاجها كانت إجابة واضحة للمبتدئ.على وجه التحديد، ما تعنيه عبارة "فرعك متقدم بـ..." هو أن هناك ملفات أضفتها والتزمت بها في مستودعك المحلي، لكن لم تدفعها مطلقًا إلى الأصل.ومما يزيد من غموض القصد من هذه الرسالة حقيقة أن "git diff"، على الأقل بالنسبة لي، لم يظهر أي اختلافات.لم يتم إخباري بوجود اختلافات بين المستودع المحلي الخاص بي والمستودع الرئيسي البعيد حتى قمت بتشغيل "git diff Origin/master".

لذا، لكي نكون واضحين:


"فرعك أمامك..." => أنت بحاجة للدفع إلى السيد البعيد.يجري ""git diff Origin/master"" لمعرفة الاختلافات بين المستودع المحلي الخاص بك والمستودع الرئيسي البعيد.


نأمل أن يساعد هذا مبتدئين آخرين.

(أدرك أيضًا أن هناك تفاصيل دقيقة في التكوين قد تؤدي إلى إبطال هذا الحل جزئيًا، مثل حقيقة أن السيد قد لا يكون في الواقع "بعيدًا"، وأن "الأصل" هو اسم قابل لإعادة التكوين يستخدم بواسطة الاتفاقية، وما إلى ذلك.لكن المبتدئين لا يهتمون بهذا النوع من الأشياء.نريد إجابات بسيطة ومباشرة.يمكننا أن نقرأ عن التفاصيل الدقيقة لاحقًا، بمجرد أن نحل المشكلة الملحة.)

الايرل لقب انكليزي

واجهت مشكلة مشابهة لهذه حيث كان دليل العمل الخاص بي ahead of origin by X commits لكن ال git pull كان يؤدي إلى Everything up-to-date.لقد تمكنت من إصلاحه عن طريق المتابعة هذه النصيحة.أقوم بنشر هذا هنا في حالة أنه يساعد شخصًا آخر يعاني من مشكلة مماثلة.

الإصلاح الأساسي هو كما يلي:

$ git push {remote} {localbranch}:{remotebranch}

حيث يجب استبدال الكلمات الموجودة بين قوسين باسمك البعيد واسم فرعك المحلي واسم فرعك البعيد.على سبيل المثال

$ git push origin master:master

في بعض الأحيان يكون هناك اختلاف بين النسخة المحلية المخزنة مؤقتًا من الأصل الأصلي (الأصل/الرئيسي) والأصل الأصلي الحقيقي.

اذا ركضت git remote update سيؤدي هذا إلى إعادة مزامنة الأصل الرئيسي مع الأصل/السيد

انظر الإجابة المقبولة على هذا السؤال

الاختلافات بين git pull Origin master و git pull Origin/master

اعتقدت أن جهاز الكمبيوتر المحمول الخاص بي هو الأصل ...

هذا نوع من الهراء: origin يشير إلى المستودع الافتراضي البعيد - وهو المستودع الذي عادةً ما تقوم بإحضار/سحب تغييرات الآخرين منه.

كيف يمكنني:

  1. git remote -v سوف تظهر لك ما origin يكون؛ origin/master هي "الإشارة المرجعية" لآخر حالة معروفة لـ master فرع من origin مستودع، والخاصة بك master هو فرع التتبع ل origin/master. هذا كل شيء كما ينبغي أن يكون.

  2. لم تكن.على الأقل ليس من المنطقي أن يكون المستودع هو المستودع البعيد الافتراضي لنفسه.

  3. ليس كذلك.إنه يخبرك فقط أنك قمت بتنفيذ العديد من الالتزامات محليًا والتي ليست موجودة في المستودع البعيد (وفقًا لآخر حالة معروفة لهذا المستودع).

[ حل ]

$ git push origin

^ هذا حلها بالنسبة لي.ما فعلته هو أنها قامت بمزامنة رئيسي (على الكمبيوتر المحمول) مع "Origin" الموجود على الخادم البعيد.

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

أقوم بإنشاء مستودع جديد (rep1)، ووضع ملف واحد فيه وألتزم به.

mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"

أقوم بإنشاء نسخة من rep1 وأطلق عليها اسم rep2.أنظر داخل REP2 وأرى أن الملف صحيح.

cd ~
git clone ~/rep1 rep2
cat ~/rep2/README

في الرد 1 أقوم بإجراء تغيير واحد على الملف وألتزم به.ثم في REP1 أقوم بإنشاء جهاز تحكم عن بعد للإشارة إلى REP2 ودفع التغييرات.

cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master

الآن عندما أذهب إلى مندوب 2 وأجري "حالة git"، يتم إخباري بأنني متقدم على الأصل.

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#

README في تكرار 2 هو كما كان في الأصل، قبل الالتزام الثاني.التعديلات الوحيدة التي قمت بها هي تكرار 1 وكل ما أردت فعله هو دفعهم للخارج إلى ريب 2.ما هو الأمر الذي لا أفهمه؟

إنه في انتظارك "للدفع".يحاول:

$ git push

لقد واجهت هذه المشكلة مؤخرًا واعتقدت أن السبب هو أنني قمت بحذف بعض الملفات التي لم أعد بحاجة إليها.تكمن المشكلة في أن git لا يعرف أن الملفات قد تم حذفها ويرى أن الخادم لا يزال يحتفظ بها.(الخادم = الأصل)

لذلك ركضت

git rm $(git ls-files --deleted)

ثم ركض الالتزام والدفع.

هذا حل المشكلة.

أنا مبتدئ جيت كذلك.واجهت نفس المشكلة مع رسائل "فرعك متقدم على الأصل/الرئيسي بواسطة عمليات N".أظهر تنفيذ "git diff Origin/master" المقترح بعض الاختلافات التي لم أهتم بالاحتفاظ بها.لذا ...

نظرًا لأن نسخة git الخاصة بي كانت مخصصة للاستضافة، وأردت نسخة طبق الأصل من الريبو الرئيسي، ولم أهتم بالاحتفاظ بأي تغييرات محلية، فقد قررت حفظ الريبو الخاص بي بالكامل وإنشاء واحد جديد:

(على جهاز الاستضافة)

mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo

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

/نارا

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

الحصول على قائمة أجهزة التحكم عن بعد:

git remote

قم بإزالة الشخص الذي لا تحتاجه

git remote rm {insert remote to remove}

من الممكن إعادة التعيين على التزام محدد قبل تنفيذ التزاماتك.

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)

يستخدم git log للعثور على الالتزام الذي قمت به قبل حدوث التغييرات المحلية.

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

لاحظ الالتزامات المحلية وأعد التعيين مباشرةً على الالتزام السابق:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

لقد واجهت مشكلة "فرعك قبل" Origin/Master "بواسطة NN Commits." عندما دفعت إلى مستودع بعيد مع:

git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git

عندما وجدت أن عنواني البعيد موجود في الملف .git/FETCH_HEAD واستخدمه:

git push

اختفت المشكلة.

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