Git Bundle’s

في إحدى المرات طُلب مني تثبيت نظام يجري تطويره لاحدى الشركات في خادم غير متصل بالانترنت (لإسباب امنيه).

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

  1. لايوجد سجل للتغييرات وفي حالة حدوث خطاء فادح لا يمكن الرجوع الى اقرب نسخه مستقره.
  2. نقل الملفات التي تم تحديثها طريقه غير عمليه ولايمكن الاعتماد عليها لما تسببه من اخطاء في حالة نسيان احدى الملفات.
  3. نقل المشروع بالكامل في كل مره يتم تحديثه يتطلب وقت اطول لنقله وإعداده.

ولحسن الحظ فإن Git توفر حل لمثل هذه الحالات وهو الامر bundle

مايقوم به الامر السابق هو تحزيم كامل للمشروع مع ما يحتويه من tags,history,branches في ملف قابل للنقل والاستخدام كما لو كنت تتعامل مع خادم Git.

إنشاء حزمه جديده

لإنشاء حزمه من المشروع الحالي بالامر التالي

git bundle create project.git master development

سيقوم الامر السابق بإنشاء حزمه للمشروع للفرعين master و development.

ولإنشاء حزمه لجميع الفروع مرر الخيار all كالتالي

git bundle create project.git --all

سينتج ملف بأسم project.git قابل للنقل.

يٌفضل إنشاء tag لتعليم اخر نسخه قُمت بتحزيمها بالامر التالي

git tag v0.1.5-alpha

ولإستيراد الحزمه نفذ الامر التالي

git clone project.git project

سيقوم الامر السابق بإستيراد المشروع في المجلد project. ويمكنك التعامل مع المشروع كما لو كنت تتعامل مع خادم Git.

وعند تنفيذ الامر git remote -v . سيعرض لي المصادر التي يعتمد عليها المشروع كالتالي

origin	/home/USER/lab/git/test/project.git (fetch)
origin	/home/USER/lab/git/test/project.git (push)

في المره القادمه عند إنشاء حزمه جديده للمشروع ضعها في المسار/home/USER/lab/git/test/project.git.

عند وجود تحديثات جديده, امامنا خيارين

  1. إعادة تحزيم المشروع من جديد (إذا كانت تعديلاتك معقده وفي عدة فروع).
  2. إنشاء Patch (إذا كانت تعديلاتك مقتصره على فرع واحد وتحتوي على عدة commits).

إعادة تحزيم المشروع

بما ان v0.1.5-alpha هو اخر tag قُمت بإنشائه. سأنفذ الامر التالي

git bundle create project.git v0.1.5-alpha..master --since=3.days.ago development

والذي بدوره سيقوم بتحزيم

  • التعديلات التي طرئت في الفرع master منذ إنشاء v0.1.5-alpha حتى اخر تعديل
  • التعديلات التي طرئت على الفرع development خلال اخر 3 ايام.

وانقل الملف الى المسار المطلوب.

وللتاكد من صلاحية الملف وتوافقه مع المشروع الحالي نفذ الامر التالي

git bundle verify /home/USER/lab/git/test/project.git

ثم git pull لسحب اخر التعديلات .

يتبع Git Patch