في إحدى المرات طُلب مني تثبيت نظام يجري تطويره لاحدى الشركات في خادم غير متصل بالانترنت (لإسباب امنيه).
ولإن النظام قيد التطوير فإن التحديثات كانت شبه يوميه وفي هذه الحاله لايمكن الاعتماد على ضغط المشروع ونقله في كل مره يتم تحديث النظام لعدة اسباب.
- لايوجد سجل للتغييرات وفي حالة حدوث خطاء فادح لا يمكن الرجوع الى اقرب نسخه مستقره.
- نقل الملفات التي تم تحديثها طريقه غير عمليه ولايمكن الاعتماد عليها لما تسببه من اخطاء في حالة نسيان احدى الملفات.
- نقل المشروع بالكامل في كل مره يتم تحديثه يتطلب وقت اطول لنقله وإعداده.
ولحسن الحظ فإن 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
.
عند وجود تحديثات جديده, امامنا خيارين
- إعادة تحزيم المشروع من جديد (إذا كانت تعديلاتك معقده وفي عدة فروع).
- إنشاء 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