هذا الدرس الثالث من سلسلة شرح نظام إدارة النُّسَخ الموزع Git، الذي بدأناها بمقالين:
درس اليوم سنتعرف فيه على دورة حياة الملف في المستودع، فلكل ملف دورة حياة، يبدأ في المهد صبيًّا ثم يشب ويصير شابًا، ثم يشيخ فيموت.
اعلم أن كل ملف في مجلد المشروع له حالتين،
١. مُتعَقب tracked، يتعقبه جيت، يتعقل كل التغييرات التي تطرأ عليه
٢. ومهمل (غير متعقب) untracked، لا يتعقبه جت
وكل ملف لا يذهب من ساعته إلى المستودع، المجلد المخفي الذي اسمه .git، إنما يمر بثلاث مراحل حتى يصل إليه، وتفصيلها دونك:
المراحل الثلاث

المرحلة الأولى: المجلد الحالي
أول مرحلة اسمها المجلد الحالي working directory، وهو المجلد الذي يحوي المستودع .git، ومن اسمه تفهمه، فهو المجلد الذي به المشروع الذي تبنيه، والذي يحوي المستودع الذي يسجل ما تفعله في ملفاتك.
لما ننشئ مستودعا بالأمر (راجع الدرس الثاني هنا):
git init
فإن المجلد وما يحويه قبل تنفيذ الأمر مهمل لا يعرفه جت، ولما تكتب الأمر الآنف فإنك تستحضر جيت وتقول له: «ستعمل في هذا المجلد كي تسجل كل تغيُّر أحدثه». والأمر الآنف كما شرحت في الدرس الثاني ينشئ مجلدًا مخفيًا اسمه .git، يخزن فيه بيانات وصفية وقاعدة بيانات الكائنات object database (نفصلها في مقالات آتية)، وهذا كله يحدث على حاسوبك، دون اتصال بالشبكة.
جيت لا يتعقب الملفات في هذه المرحلة، يعلم أن في هذا المجلد ملفات، ويعلم أنه سيعمل هنا، لكن لن يتعقبها! هب أن في المجلد ألف ملف، فهو سيعلم بوجودها ولكن لن يتعقبها، إنما يتعقب ما تخبره أنت بتعقبه.
كيف تأمره بتعقبها؟
لتأمر جيت بتعقب الملفات فإنك محتاج إلى إضافتها إلى المرحلة الثانية، مرحلة الإعداد، ودونك تفصيلها:
المرحلة الثانية: منطقة الإعداد
يعلم جيت في هذه المرحلة أي الملفات وتغييراتها يجب أن يتعقب فيتعقبها، فمنطقة الإعداد تحوي الملفات التي تود من جيت تعقبها لك، كأنك تقول له: يا جيت احفظ هذه الملفات وتغييراتها حتى أقذف بها في الإيداع القادم next commit (لا تعجل، سأخبرك ما معنى الإيداع بعد قليل).
الملفات هنا في حالة إعداد، وفي هذه المرحلة لا تصل الملفات إلى المستودع، إلى قاعدة المعطيات لتُخَزَّن فيها، لا، لهذا اسمها مرحلة إعداد، تجهيز، تجهز هذه الملفات قبل القذف بها إلى المستودع (.git).
كيف نضيف ملفًا إلى هذه المنطقة يا مبعسس؟
نستعمل الأمر git متبوعًا بكلمة إضافة add ثم اسم الملف:
git add main.rs
قبل استعمال الأمر فإن حالة الملف file.txt كانت (مهمل)، أي لا يتعقبه جيت، لكن بالأمر الآنف ستضيف الملف file.txt إلى منطقة الإعداد، وهكذا سيتتبعه جيت!
لا تصدق كلامي؟
أنشئ ملفًا جديدًا في نفس المجلد، ثم اكتب الأمر الآتي:
git status
هذا الأمر يعرض لك حالة الملفات في المجلد. ووجب الذكر أن الملف في هذه المنطقة لو عدلت عليه فإنه سيتحول إلى حالة أخرى يكون فيها الملف مُعدَّلًا
modified، أي قد أنك غيرته بعد أن وضعته في مرحلة الإعداد، ووضعه في مرحلة الإعداد يخبر جيت أن يأخذ لقطة لحظية (نسخة) من محتواه إعدادًا لها قبل قذفها إلى مرحلة الإيداع.
جرب إضافة نص إلى الملف السابق ثم اكتب الأمر الذي يعرض حالة الملف لترى ما يخبرك في الأسفل باللون الأحمر.
قلنا إن هذه مرحلة إعداد، أي تنتظر مرحلة أخرى، ولم أبيَّن لك ما معنى الإيداع أيضًا!
هيا إلى المرحلة الثالثة:
المرحلة الثالثة: مرحلة الإيداع
وهذه المرحلة الأخيرة، ومن اسمها تفهمها، فهي مرحلة تودع فيها شيئًا، فهل تدري ما هو؟ وإلى أين سنودعه؟
بعد الانتهاء من إعداد الملف في منطقة الإعداد فإنك ستودع التغييرات التي أحدثتها إلى المستودع لتقول لجيت إنك عدلت المشروع، فيا جيت احفظ لي هذا الإصدار في المستودع (قاعدة المعطيات database).
ولا ريب أنك ستكتب رسالة مختصرة تخبر جيت فيها عن الأشياء التي عدلتها في هذا الإصدار أو الإيداع، فكيف تخبره بذلك، أي أمر نستعمل؟
سنستعمل الأمر git متبوعًا بكلمة إيداع commit مع اللاحقة m- (وهي اختصار كلمة رسالة message) متبوعةً بالرسالة التي نود كتابتها، وستكون بين علامتي تنصيص:
git commit -m "Fix a bug in main.rs"
وبعد هذا الأمر سيذهب التغيير وفي أي ملف حدث مع الرسالة التي كتبتها إلى المستودع، وبفعلك هذا تستطيع استرجاع هذا الإصدار من المشروع إن أفسدته (سندرس كيفية الرجوع لإصدار قديم في قادم الأيام إن شاء اللّٰه).
تود رؤية هذه الإيداعات؟
اكتب الأمر التالي:
git log
سيعرض هذا لك الإيداع مع معلومات هامة:
مُعرِّف الإيداع commit hash: معرف مميز يميز كل إيداع في المشروع ببصمة فريدة
المبرمج author: الرجل الذي أحدث التغيير
التاريخ date: تاريخ التعديل متى كان
رسالة الإيداع commit message: رسالة تشرح الإيداع
وإن أردت عرضها باختصار فاكتب الأمر:
git log --oneline
إن رأيتني لم أشرح بعض الأشياء أو ما ذكرتها فإني أرجأتُ شرحها إلى الموضع اللائق بها، وكل شيء سأشرحه إن شاء اللّٰه.
الملف بعد أن يودع تكون حالته غير معدل unmodified، ثم إذا إذا عدَّلته بإضافة أو حذف تصير حالته إلى مُعدَّل modified، وعليك وضعه في مرحلة الإعداد ثم تودعه إلى المستودع، ثلاث مراحل تتكرر كل مرة تنشئ فيها ملفًا أو تعدل عليه، فتدرَّب عليها حتى تحفظها.
الخاتمة
ها قد وصلنا إلى نهاية المقال، وها أنا أخط بقلمي الخطوط الأخيرة لهذا المقال الشائق، وأرجو إني قد وفِّقت في الشرح.
وفي نهاية الأمر لا يسعني سوى أن أشكرك على حسن قراءتك لهذا المقال، وأني لبشر أصيب وأخطِئ، فإن وفِّقت في طرح الموضوع فمن اللّٰه عز وجل وإن أخفقت فمن نفسي والشيطان.
أرجو منك تقييم كفاءة المعلومات من أجل تزويدي بالملاحظات والنقد البناء في خانة التعليقات أو عبر حساب الموقع، والسلام عليكم ورحمة اللّٰه تعالى وبركاته.