كيفية استخدام git-bundle للحفاظ على التنمية متزامنة؟

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

  •  30-09-2019
  •  | 
  •  

سؤال

أحتاج إلى الحفاظ على أشجار التطوير الخاصة بي متزامنة على أجهزة الكمبيوتر المختلفة ، مع عدم وجود اتصال بالشبكة بينهما.

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

لقد قرأت صفحات المساعدة git-bundle, ، والتي تبدو أفضل أداة ، لكنني لست متأكدًا حقًا من كيفية إعداد سير العمل الجيد.

هل يمكنك أن تعطيني بعض النصائح أو المؤشرات؟

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

المحلول

حزم!

سيكون سير العمل مع حزمة GIT هو نفسه في الأساس مثل أي سير عمل آخر. قد لا يبدو هذا بمثابة نصيحة مفيدة بشكل رهيب ، ولكن هنا: استخدم أي سير عمل تستخدمه عادةً ، واستبدال "Push/سحب" بـ "احمل حزمة هنا على محرك أقراص فلاش ، ثم سحب".

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

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

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

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

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

repo على محرك الإبهام

بصراحة ، ما لم يكن الريبو الخاص بك كبيرًا حقًا ، فقد يكون هذا بنفس القدر. ضع استنساخًا عاريًا على محرك الإبهام ، ويمكنك الدفع إليه من كلا الكمبيوترين والسحب منه. تعامل معها مثل اتصال الشبكة الخاص بك. هل تحتاج إلى نقل إلى الريبو المركزي؟ اشبكها!

نصائح أخرى

jefromi الإجابة كانت رائعة - 10x أفضل من مستندات GIT ، والتي تستمر مطولاً بشأن المتطلبات والإجراءات غير المفهومة.

لا يزال الأمر معقدًا بعض الشيء ، لذا فإليك أبسط حالة تزامن مرة واحدة (في حالتي: من: جهاز كمبيوتر محمول غير متصل مع بطاقة WiFi المكسورة ، إلى: سطح مكتب مع صافي وصول). بناءً على إجابة @Jefromi ، يبدو أن هذا يعمل بشكل جيد:

إلى الأمام = الآلة التي تتقدم بعدد عدد من الالتزامات. خلف = الجهاز تريد نسخ الالتزامات إلى

1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

كلاهما: نسخ myBundLename.bundle (باستخدام البريد الإلكتروني ، USB ، أيا كان)

وراء: (ضع الملف myBundName.bundle في أي مكان تريده الخارج مجلد المشروع)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

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

أي إذا كان وراء الوصول إلى الإنترنت ، فلا يزال من الآمن القيام:

(OPTIONAL) 4. BEHIND: git push

... وسوف يقوم بتحديث المستودع الرئيسي ، كما لو أن التغييرات قد تم محليًا ، كالمعتاد ، على الخلف.

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