نسخ احتياطية من Git: هل يمكنني نسخ مستودع git عارية أثناء دفعه؟

في شركتنا ، نقوم بتجريب الانتقال من svn إلى git. نحن نريد أن نجعل هذا الأمر بسيطًا بالنسبة للفرق ، في حين أنه لا يثقل كاهل مسؤول النظام كثيرًا.

لقد وجدنا طريقة للقيام بذلك عن طريق إنشاء مستودع فارغ على محرك أقراص الشبكة (Windows) الذي يمتلكه كل فريق ، والضغط/السحب من وإلى ذلك. يتم ترتيب المصادقة من خلال أذونات الوصول إلى الملفات ، لذلك لا تحتاج إلى إعداد https وأشياء auth بأكملها. عظيم! (ويمكننا الوصول إلى محرك الأقراص عن بعد من خلال شبكة VPN ، لذا فهو في الحقيقة جيد تمامًا مثل حل https أو git + ssh)

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

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

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

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

Edit: I accepted a 'do it the right way' answer, because that's what I intend doing in the long run. For now, however, for us a simple solution has been to git clone the entire bare repository (onto the same drive) about an hour before the automated backup kicks in. The automated backup may incorrectly copy the "real" repository if it has been in use at that point, but it will not have trouble with the recently cloned copy. We know when the backup starts, just not when it ends, so that's good enough for us.

0
أدرك أن بعض الاختلافات في git clone ربما تكون أفضل. النقطة هي ، آلية النسخ الاحتياطي لنسخ الملفات القياسية (لمحرك الأقراص بأكمله ، وليس فقط repos git) هي بالفعل في مكانها . سؤالي هو ما إذا كان هذا آمن بما فيه الكفاية.
وأضاف المؤلف skrebbel, مصدر
إذا كنت تستخدم نسخة الخام فقد يكون لديك بعض الفروع مؤمّنة (نظريًا). يجب أن تفضل "git clone --bare" بدلاً من ذلك. لست متأكدًا من كيفية تصرف "git clone --bare" إذا كان يتوافق مع مرجع مقفل (إذا كان ينتظر إلغاء القفل ، أو فشل ، أو يتجاهل القفل أو يتخطى الفرع - فالخياران الأولان فقط آمنان).
وأضاف المؤلف Dmitry Pavlenko, مصدر

2 إجابة

كيف تتعامل مع الملفات الأخرى ما يمكن تعديله أثناء إجراء النسخ الاحتياطي؟

إذا كنت تتعامل مع هذا الموقف بالفعل ، يمكنك استخدام نفس النهج هنا. وإلا فقد تحصل على ملفات مكسورة في أي مكان ، إما في بوابة git أو في svn أو حتى في TXT عارية.

0
وأضاف

قد يكون من المفيد تغيير سياسة النسخ الاحتياطي الخاصة بك لتجاهل النسخ الاحتياطي لمستودع Git بأكمله وبدلاً من ذلك قم بعمل نسخة احتياطية من حزمة Git . من Git's Little Bundle of Joy :

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

تتم مناقشة هذا النهج أيضًا في النسخ الاحتياطي لـ github repo و نسخ احتياطي لمستودع Git المحلي .

اختبار سريع للريبو المحلي يكشف عن ما يلي يخلق ملفًا واحدًا يحتوي على كل ما يريده المرء عادةً في نسخة احتياطية كاملة من النسخ الاحتياطية:

$ git bundle create ../my.bundle --all

إنشاء نسخة من ملف الحزمة هو ببساطة:

$ git clone my.bundle my-repo

يوضح git ls-remote my.bundle أن جميع العلامات والفروع موجودة في الحزمة.

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

0
وأضاف