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

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