الباب الأول: البدء

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

عن إدارة النسخ

ما هي «إدارة النسخ»، ولماذا عليك أن تهتم؟ إدارة النسخ هي نظام يسجل التعديلات على ملف أو مجموعة من الملفات عبر الزمان، حتى يمكنك استدعاء نسخ معينة منها فيما بعد. نستخدم في أمثلة هذا الك‍تاب ملفات مصادر برمجية لإدارة نُسخها، ولو أن في الحقيقة يمكنك فعل ذلك مع أكثر أنواع الملفات الحاسوبية.

إذا كنت مصمم رسوميات أو وب وتريد الإبقاء على جميع نسخ صورة أو تخطيط (وهذا شيء يُفترض أنك تريد فعله بالتأكيد)، فإن استخدام نظام إدارة نسخ (VCS) لهو قرار حكيم جدا. فهو يسمح لك بإرجاع ملف محدد إلى حالة سابقة، أو إرجاع المشروع كله إلى حالة سابقة، أو مقارنة التعديلات عبر الزمان، أو معرفة مَن آخر من عدّل شيئا قد يكون سبّب مشكلة، أو مَن تسبب في إحداث علّة، وغير ذلك. استخدام نظام إدارة نسخ أيضا يعني في العموم أنك إذا دمّرت أشياء أو فقدت ملفات، فإنك تستطيع استرداد الأمور بسَهولة. وكل هذا تحصل عليه مقابل عبء ضليل جدا.

الأنظمة المحلية لإدارة النسخ

طريقة إدارة النسخ عند الكثيرين هي نسخ الملفات إلى مجلد آخر (ربما بختم زمني، إذا كان المستخدم بارعا). هذه الطريقة شائعة جدا لأنها سهلة جدا، لكنها أيضا خطّاءة جدا جدا. فسهل جدا أن تنسى أي مجلد أنت فيه وتغيّر في الملف الخاطئ أو تنسخ على ملفات لم ترد إبدالها.

لحل هذه القضية، طوّر المبرمجون منذ زمن بعيد «أنظمة محلية لإدارة النسخ» ذات قاعدة بيانات بسيطة تحفظ جميع التعديلات على الملفات المراد التحكم في نُسخها.

رسم توضيحي للإدارة المحلية للنسخ
شكل ١. رسم توضيحي للإدارة المحلية للنسخ

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

الأنظمة المركزية لإدارة النسخ

المشكلة الكبرى الأخرى التي واجهت الناس هي أنهم يحتاجون إلى التعاون مع مطوِّرين على أنظمة أخرى. ولحلها، أُنشئت «الأنظمة المركزية لإدارة النسخ» (CVCS). لهذه الأنظمة (مثل CVS و Subversion و Perforce) خادوم وحيد به جميع الملفات المراقَبة، وعدد من العملاء الذين يستنسخون الملفات من ذلك المركز الوحيد. كان هذا هو المعيار المتبع لإدارة النسخ لأعوام عديدة.

رسم توضيحي للإدارة المركزية للنسخ
شكل ٢. رسم توضيحي للإدارة المركزية للنسخ

لهذا الترتيب مزايا كثيرة، لا سيما على الإدارة المحلية للنسخ. مثلا، الجميع يعلم، إلى حدٍ ما، كل ما يفعله الآخرون في المشروع نفسه. ولدى المديرين تحكم مفصّل في تحديد مَن يستطيع فعل ماذا، وإنه لأسهل كثيرا إدارة نظام مركزي مقارنةً بالتعامل مع قواعد بيانات محلية عند كل عميل.

ولكن لهذا الترتيب بعض العيوب الخطيرة. أكثرها وضوحا هو نقطة الانهيار الحاسمة الذي يمثلها الخادوم المركزي. فإذا تعطل الخادوم ساعةً، ففي تلك الساعة لن يستطيع أحد مطلقا التعاون أو حتى حفظ تعديلاتهم على ما يعملون عليه. وإذا تلف قرص قاعدة البيانات المركزية، ولم تحفظ أي نسخ احتياطية، ستفقد كل شيء تماما: تاريخ المشروع برُمّته، ما عدا أي لقطات فردية تصادف أن يُبقيها الناس على أجهزتهم المحلية. تعاني الأنظمة المحلية لإدارة النسخ أيضا من هذه العلة نفسها؛ وقتما جعلت التاريخ الكامل للمشروع في مكان وحيد، فإنك تعرض نفسك لفقد كل شيء.

الأنظمة الموزعة لإدارة النسخ

الآن تتدخل الأنظمة الموزعة لإدارة النسخ (DVCS). في نظام موزع (مثل جت و Mercurial و Darcs)، لا يستنسخ العملاء اللقطة الأخيرة فقط من الملفات، ولكنهم يستنسخون المستودع برُمّته، بما في ذلك تاريخه بالكامل. لذا فإن انهار أحد الخواديم فجأة، وكانت هذه الأنظمة تتعاون عبر هذا الخادوم، فيمكن نسخ مستودع أي عميل إلى الخادوم مجددا لإعادته للعمل. كل نسخة هي في الحقيقة نسخة احتياطية كاملة لجميع البيانات.

رسم توضيحي للإدارة الموزعة للنسخ
شكل ٣. رسم توضيحي للإدارة الموزعة للنسخ

علاوة على ذلك، الكثير من هذه الأنظمة تتعامل جيدا مع وجود العديد من المستودعات البعيدة التي يمكنها العمل معها، لذا يمكنك التعاون مع مجموعات مختلفة من الناس بأساليب متعددة في الوقت نفسه داخل المشروع الواحد. هذا يسمح لك بتكوين أساليب سير عمل متعددة لم تكن ممكنة في الأنظمة المركزية، كالنماذج الشجرية.

تاريخ جت بإيجاز

مثل الكثير من الأشياء العظيمة في الحياة، بدأ جت بشيء من التدمير الإبداعي والخلافات المُتَّقدة.

نواة لينكس هي مشروع برمجي مفتوح المصدر ذو امتداد شاسع إلى حد ما. في السنوات الأولى من تطوير نواة لينكس (١٩٩١–٢٠٠٢)، كانت التعديلات البرمجية تتناقل في صورة رقع وملفات مضغوطة. وفي عام ٢٠٠٢، بدأ مشروع نواة لينكس باستخدام نظام إدارة نسخ موزع احتكاري يسمى BitKeeper.

ولكن في عام ٢٠٠٥، تدهورت العلاقة بين المجتمع الذي يطور نواة لينكس والشركة التجارية التي تتطور BitKeeper، وأسقطت صفة المجانية عن الأداة. دفع هذا مجتمع تطوير لينكس (وبالأخص Linus Torvalds، مؤسس لينكس) إلى تطوير أداتهم الخاصة بناءً على بعض ما تعلموه في أثناء استخدامهم BitKeeper. وكانت من أهداف النظام الجديد ما يلي:

  • السرعة

  • التصميم البسيط

  • دعم وثيق للتطوير اللاخطي (آلاف الفروع المتوازية)

  • موزع بالكامل

  • التعامل مع مشروعات ضخمة كنواة لينكس بكفاءة (من ناحية السرعة وحجم البيانات)

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

ما هو جت؟

إذًا، ما هو جت باختصار؟ هذا فصل مهم ويجب استيعابه جيدا، لأنك إذا فهمت ماهية جت وأصول طريقة عمله، فسيكون سهل جدا عليك استخدام جت بفعالية. وخلال تعلمك جت، عليك تصفية ذهنك من كل ما تعمله عن أنظمة إدارة النسخ الأخرى، مثل CVS أو Subversion أو Perforce — يساعدك هذا على تجنب أي التباسات خفية عندما تستخدمه. ومع أن واجهة جت قريبة الشبه بالأنظمة الأخرى، إلا أن جت يخزن المعلومات بطريقة وينظر إليها نظرةً مختلفة أشد الاختلاف، ويساعدك فهم هذه الفروق على تجنب الالتباس عند استخدامه.

لقطات، وليس فروقات

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

تخزين البيانات في صورة تعديلات على نسخة أساسية من كل ملف
شكل ٤. تخزين البيانات في صورة تعديلات على نسخة أساسية من كل ملف

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

تخزين البيانات في صورة لقطات من المشروع على مر الزمان
شكل ٥. تخزين البيانات في صورة لقطات من المشروع على مر الزمان

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

أغلب العمليات محلية

أكثر العمليات في جت لا تحتاج إلا إلى ملفات وموارد محلية لكي تعمل؛ فعموما لا حاجة إلى أي معلومات من حواسيب أخرى على الشبكة. إذا كنت معتادًا على نظام إدارة نسخ مركزي، حيث معظم العمليات مثقلة بعبء زمن الانتقال في الشبكة، فإن هذا الجانب من جت سيجعلك تظن أن الله قد منّ عليه بقدرة لدنيّة لتكون له هذه السرعة. فلأن لديك التاريخ الكامل للمشروع بين يديك على قرصك المحلي، فإن معظم العمليات تبدو آنية.

مثلا، لتصفح تاريخ المشروع، لا يحتاج جت إلى السفر إلى الخادوم ليعود إليك حاملا التاريخ ليعرضه لك — إنما يقرؤه من قاعدة بياناتك المحلية. هذا يعني أنك ترى تاريخ المشروع أسرع من طرفة العين. وإذا أردت أن ترى التعديلات التي حدثت على ملف بين نسخته الآن ومنذ شهر، فيستطيع جت أن يأتي بهذا الملف منذ شهر ويحسب الفرق على حاسوبك، بدلا من الاضطرار إلى طلب هذا الفرق من خادوم بعيد أو طلب النسخة القديمة منه وحساب الفرق محليا.

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

في جت السلامة

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

الآلية التي يستخدمها جت لحساب البصمة معروفة باسم بصمة SHA-1. وهي تنتج سلسلة نصية من أربعين (٤٠) رقما ستعشريا (0–9 و a–f) محسوبين من محتوى الملف أو بنية المجلد في جت. تشبه بصمة SHA-1 هذا:

24b9da6552252987aa493b52f8696cd6d3b00373

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

يضيف جت بيانات فقط في العموم

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

هذا يجعل استخدام جت مبهجًا لأننا نعلم أننا نستطيع التجريب بغير خطر التخريب. لنظرة أعمق على كيفية تخرين جت لبياناته وكيفية استعادة البيانات التي تبدو لك قد فُقدت، انظر التراجع عن الأفعال.

المراحل الثلاثة

انتبه الآن وركّز؛ هذا هو أهم شيء عليك أن تتذكره دوما عن جت إذا أردت أن تمضي رحلة تعلمك بسلاسة. في جت ثلاث مراحل يمكن أن تكون ملفاتك فيها: معدّل، ومؤهل، ومُودَع.

  • معدل يعني أنك عدلت الملف لكنك لم تُودِع التعديلات بعد في قاعدة بياناتك.

  • مؤهل يعني أنك حددت ملفًا معدلًا في نسخته الحالية ليكون ضمن لقطة الإيداع التالية.

  • مُودَع يعني أن البيانات صارت مخزنة بأمان في قاعدة بياناتك.

يقودنا هذا إلى الأقسام الرئيسية الثلاثة في أي مشروع جت: شجرة العمل، ومنطقة التأهيل، ومجلد جت.

شجرة العمل، ومنطقة التأهيل، ومجلد جت
شكل ٦. شجرة العمل، ومنطقة التأهيل، ومجلد جت

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

منطقة التأهيل هي ملف يخزن معلومات عما سيكون في إيداعك التالي، وعادةً يكون ملف منطقة التأهيل في مجلد جت لمشروعك. المصطلح التقني في لغة جت هو «الفهرس» (index)، لكن العبارة «منطقة التأهيل» (staging area) مناسبة ومستخدمة أيضا.

مجلد جت هو المكان الذي يخزن فيه جت البيانات الوصفية وقاعدة بيانات الكائنات لمشروعك. هذا هو أهم جزء في جت، وهم الذي يُنسخ عندما تستنسخ (clone) مستودعا من حاسوب آخر.

يبدو أسلوب سير العمل الأساسي في جت مثل هذا:

  1. تعدّل ملفات في شجرة عملك.

  2. تنتقي من تلك التعديلات ما تؤهله ليكون جزءًا من إيداعك التالي، وهذا لا يضيف إلا هذه التعديلات إلى منطقة التأهيل.

  3. تصنع إيداعا، وهذا يلتقط صورة للملفات كما هي من منطقة التأهيل ويخزن هذه اللقطة في مجلد جت لمشروعك إلى الأبد.

إذا كانت نسخة معينة من أحد الملفات موجودة داخل مجلد جت، فإنها تعتبر مُودَعة. وإذا كانت معدّلة وقد أضيفت إلى منطقة التأهيل، فإنها مؤهَّلة. وإذا كانت معدّلة بعد آخر مرة سُحبت فيها لكنها لم تؤهل بعد، فإنها معدَّلة. ستتعلم المزيد في أسس جت عن هذه الحالات وكيف يمكنك استغلالها أو تخطي مرحلة التأهيل برمتها.

سطر الأوامر

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

لذلك فإننا نتوقع منك معرفة كيف تفتح الطرفية (Terminal) في الأنظمة اليونكسية أو موجه سطر الأوامر (Command Prompt) أو PowerShell في ويندوز. إن لم تكن تعلم عما نتحدث، فعليك التوقف الآن وبحث هذا سريعا حتى تستطيع السير مع الأمثلة والأوصاف التي في الك‍تاب.

تثبيت جت

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

كُتب هذا الك‍تاب عن جت نسخة ٢.‎ لكن لأن جت متميز في الحفاظ على التوافقية مع الإصدارات السابقة، فأي نسخة حديثة ينبغي أن تعمل جيدا. ومع أن معظم الأوامر ينبغي أن تعمل حتى في نسخ جت الأثرية، فقد لا يعمل بعضها أو يعمل باختلاف طفيف.

التثبيت على لينكس

إذا أردت تثبيت أدوات جت الأساسية على لينكس عبر مثبت برمجيات مبنية، فيمكنك غالبا فعل ذلك عبر أداة إدارة الحزم التي في توزيعتك. فإذا كنت على فيدورا (أو أي توزيعة قريبة منها تستخدم حزم RPM، مثل ردهات (RHEL) أو CentOS)، فيمكنك استخدام dnf:

$ sudo dnf install git-all

وإذا كنت على توزيعة دبيانية مثل أوبنتو، جرب apt:

$ sudo apt install git-all

لخيارات أخرى، توجد على موقع جت تعليمات لتثبيته على توزيعات لينكسية ويونكسية عديدة، في https://git-scm.com/download/linux.

التثبيت على ماك أو إس

توجد طرائق عديدة لتثبيت جت على ماك. ربما أسهلها هو تثبيت أدوات سطر أوامر إكس‌كود (Xcode Command Line Tools). وعلى ماك مافريكس (Mavericks, 10.9) أو أحدث، يمكنك فعل هذا بمجرد محاولة تنفيذ git في الطرفية لأول مرة مطلقا.

$ git --version

فإذا لم يكن مثبتًا لديك بالفعل، فسيحثك على تثبيته.

أما إذا أردت نسخة أحدث، فيمكنك أيضا تثبيته عبر مثبت برمجيات مبنية. يوجد مثبت جت لماك على موقع جت، في https://git-scm.com/download/mac.

مثبت جت على ماك أو إس
شكل ٧. مثبت جت على ماك أو إس

التثبيت على ويندوز

لتثبيت جت على ويندوز عدة طرائق أيضا. النسخة المبنية الأكثر رسميةً متاحة على موقع جت. عليك فقط الذهاب إلى https://git-scm.com/download/win وسيبدأ التنزيل تلقائيا. لاحظ أن هذا مشروع يسمى «جت لويندوز» (Git for Windows)، وهو منفصل عن جت نفسه؛ للمزيد من المعلومات عنه، اذهب إلى https://gitforwindows.org.

أما إذا أردت مثبتا آليا فيمكنك استخدام حزمة Git على Chocolatey. لاحظ أن المجتمع هو من يرعى حزمة Chocolatey.

التثبيت من المصدر البرمجي

ربما يفيد بعض الناس تثبيت جت من المصدر البرمجي بدلا من ذلك، لأنك عندئذٍ ستحصل على أحدث نسخة إطلاقا. مثبتات البرمجيات المبنية تميل إلى التأخر قليلا، لكن لأن جت قد نضج في الأعوام الأخيرة، فلم يعد هذا يشكّل فارقا كما كان.

إذا أردت تثبيت جت من المصدر البرمجي، فستحتاج إلى المكتبات التالية التي يعتمد عليها جت: autotools و curl و zlib و openssl و expat و libiconv. مثلا، إذا كنت على نظام يستخدم dnf (مثل فيدورا) أو apt-get (مثل الأنظمة الدبيانية)، فيمكنك استخدام أحد هذين الأمرين لتثبيت أقل اعتماديات مطلوبة لبناء جت وتثبيته:

$ sudo dnf install dh-autoreconf curl-devel expat-devel gettext-devel \
  openssl-devel perl-devel zlib-devel
$ sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev \
  gettext libz-dev libssl-dev

وتحتاج هذه الاعتماديات حتى تضيف التوثيق بصيغه المختلفة (doc و html و info):

$ sudo dnf install asciidoc xmlto docbook2X
$ sudo apt-get install asciidoc xmlto docbook2x

يحتاج مستخدمو ردهات والتوزيعات الردهاتية مثل CentOS و Scientific Linux إلى تفعيل مستودع EPEL (الشرح بالإنجليزية) حتى يستطيعوا تثبيت حزمة docbook2X.

إذا كنت تستخدم توزيعة دبيانية (دبيان أو أوبنتو أو إحدى مشتقاتهما)، فتحتاج أيضا حزمة install-info:

$ sudo apt-get install install-info

إذا كنت تستخدم توزيعة تستخدم RPM (فيدورا أو ردهات أو إحدى مشتقاتهما)، فتحتاج أيضا حزمة getopt (المثبتة مبدئيا في التوزيعات الدبيانية):

$ sudo dnf install getopt

إضافة إلى ذلك، إذا كنت تستخدم فيدورا أو ردهات أو إحدى مشتقاتهما، فتحتاج أن تفعل هذا أيضا:

$ sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi

بسبب اختلافات في أسماء الأوامر.

عندما يكون لديك جميع الاعتماديات المطلوبة، يمكنك تنزيل أحدث ملف مضغوط موسوم برقم إصدار، من عدة أماكن. يمكنك تنزيله من موقع نواة لينكس، من https://www.kernel.org/pub/software/scm/git، أو من النسخة المقابلة على موقع جت‌هب، من https://github.com/git/git/tags. غالبا يكون أوضح قليلا على جت‌هب ما هي النسخة الأحدث، ولكن في صفحة موقع نواة لينكس ستجد بصمات الإصدارات، إذا أحببت تفقّد صحة الملفات التي نزّلتها.

بعدئذٍ قم بالبناء والتثبيت:

$ tar -zxf git-2.8.0.tar.gz
$ cd git-2.8.0
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info

بعد إتمام هذا، يمكنك الحصول على جت عبر جت نفسه للتحديثات:

$ git clone https://git.kernel.org/pub/scm/git/git.git

إعداد جت لأول مرة

الآن وقد صار جت على نظامك، ستودّ عمل بعض الأمور لتخصيص بيئته لك. تحتاج عملها مرة واحدة فقط على أي حاسوب؛ فإنها تبقى عندما تحدّث جت. يمكنك أيضا تعديلها في أي وقت بالمرور على الأوامر مرة أخرى.

في جت أداة «تهيئة»، git config، لتعرض أو تضبط متغيرات التهيئة التي تتحكم في جميع مناحي مظهر وسلوك جت. وتُخزَّن هذه المتغيرات في ثلاثة أماكن مختلفة:

  1. ملف [path]/etc/gitconfig: يحتوي القيم التي تُطبّق على جميع المستخدمين ومستودعاتهم. إذا أعطيت الخيار --system («نظام») إلى أمر التهيئة git config، فإنه يقرأ ويكتب في هذا الملف تحديدًا. طبعًا تحتاج صلاحيات إدارية لتعديل هذا الملف لأنه ملف إعدادات خاص بالنظام.

  2. ملف ~/.gitconfig أو ~/.config/git/config: القيم الخاصة بك أنت تحديدًا. يمكنك جعل جت يقرأ ويكتب في هذا الملف تحديدًا بالخيار --global («عام»)، والذي يؤثر في جميع مستودعاتك على هذا النظام.

  3. ملف config في مجلد جت (أي .git/config) في أي مستودع أنت فيه الآن: القيم الخاصة بهذا المستودع وحده. يمكنك إجبار جت على القراءة والك‍تابة في هذا الملف بالخيار --local («محلي»)، ولكن في الحقيقة هذا هو المفترض. بالطبع تحتاج إلى التواجد في مكان ما في مستودع جت حتى يمكنك استخدام هذا الخيار.

قيم كل مستوى تطغى على قيم المستوى السابق، لذا فقيم .git/config تتفوق على التي في [path]/etc/gitconfig.

في أنظمة ويندوز، يبحث جت عن ملف .gitconfig في مجلد المنزل، $HOME (والذي غالبا يكون C:\Users\$USER). ويبحث كذلك عن [path]/etc/gitconfig، ولكن بالنسبة إلى جذر MSys، وهو أينما قررت تثبيت جت فيه على نظامك عندما شغّلت المثبت. وإذا كنت تستخدم Git for Windows النسخة 2.x أو أحدث، فستجد أيضا ملف إعداد على مستوى النظام، في C:\Documents and Settings\All Users\Application Data\Git\config على ويندوز إكس بي، وفي C:\ProgramData\Git\config على ويندوز فيستا والأحدث. لا يمكن تغيير هذا الملف إلا بتنفيذ الأمر git config -f <ملف> بحساب المدير.

يمكنك رؤية جميع إعداداتك ومن أين أتت باستخدام:

$ git config --list --show-origin

هويتك

أول شيء تحتاج فعله عند تثبيت جت هو ضبط اسمك وعنوان بريدك الإلكتروني. هذا مهم لأن كل إيداع جت يستخدم هاتين المعلومتين، ويصيران جزءًا ثابتًا في الإيداعات التي ستبدأ في صنعها.

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

مجددًا، لن تحتاج إلى فعل هذا إلا مرة واحدة إذا استخدمت الخيار --global («عام»)، لأن جت عندئذٍ يستخدم هاتين المعلومتين لكل ما تفعله على هذا النظام. وإن احتجت إلى تجاوز إحدى هاتين القيمتين في مشروعات محددة، يمكنك تنفيذ الأمر في ذلك المشروع بغير خيار --global.

تساعدك الكثير من الواجهات الرسومية في فعل هذا عند تشغيلها لأول مرة.

محررك

الآن وقد أعددنا هُويّتك، يمكنك ضبط محررك المبدئي للنصوص، والذي يستخدمه جت عندما يريد منك أن تكتب رسالة. إذا لم يكن مضبوطا، فيستخدم جت المحرر المبدئي لنظامك.

إذا أردت استخدام محررا آخر، مثل Emacs، فيمكنك فعل الآتي:

$ git config --global core.editor emacs

على ويندوز، إذا أردت ضبط محرر آخر، فعليك تحديد المسار الكامل لملفه التنفيذي. والذي يختلف باختلاف طريقة تحزيم محررك.

في حالة Notepad++‎، وهو محرر برمجيات مشهور، ستريد غالبا أن تستخدم نسخة ٣٢-بت منه، لأن حتى وقت ك‍تابة هذا، لا تدعم نسخة ٦٤-بت جميع الإضافات. إذا كنت على ويندوز ٣٢-بت أو تستخدم محرر ٦٤-بت على ويندوز ٦٤-بت، فإنك ستكتب شيئا مثل هذا:

$ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Vim و Emacs و Notepad++‎ هي محررات نصوص شهيرة يستخدمها المبرمجون على ويندوز والأنظمة اليونكسية مثل لينكس وماك. إذا كنت تستخدم محررًا آخر، أو نسخة ٣٢-بت، فرجاءً انظر التعليمات الخاصة بإعداد محررك المفضل مع جت في git config core.editor commands.

إذا لم تضبط محررك مثل هذا، فإنك قد تجد نفسك في حالة محيرة جدا، عندما يحاول جت فتحه. مثال ذلك على ويندوز أن يحاول جت فتح المحرر فلا يستطيع فيغلق مبكرًا.

اسم الفرع المبدئي

عندما تنشئ مستودعًا جديدًا بالأمر git init، فإن جت سيُنشئ فيه فرعًا، والذي يسميه مبدئيا master. يمكنك ضبط اسم آخر للفرع الأوليّ ابتداءً من النسخة 2.28 من جت.

لجعل اسم الفرع المبدئي هو main، نفّذ:

$ git config --global init.defaultBranch main

تفقّد إعداداتك

إذا أردت تفقّد إعدادات تهيئتك، فيمكنك استخدام خيار السرد مع أمر التهيئة — git config --list — والذي يسرد لك جميع الإعدادات التي يراها جت وقتئذٍ:

$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...

ربما ترى بعض الأسماء مكررة، هذا لأن جت قد وجد الاسم نفسه في أكثر من ملف ([path]/etc/gitconfig و ~/.gitconfig مثلا). يستخدم جت في مثل هذه الحالة القيمة الأخيرة لكل اسم يراه.

يمكنك أيضا سؤال جت عن القيمة التي يظنها لاسم معين، بالأمر git config <اسم>:

$ git config user.name
John Doe

قد يقرأ جت متغير تهيئة معين من أكثر من ملف، فمن الممكن أن تجد بعض القيم مثيرة للدهشة ولا تعرف من أين أتت. يمكنك في مثل هذه الحالة سؤال جت: من أين لك هذا؟ — أي باستخدام خيار إظهار الأصل --show-origin، الذي سيخبرك بالملف الذي غلب على أمرهم في قيمة هذا المتغير:

$ git config --show-origin rerere.autoUpdate
file:/home/johndoe/.gitconfig	false

الحصول على المساعدة

إذا احتجت يوما إلى المساعدة في جت، فعندك ثلاث طرائق متكافئة للحصول على صفحة الدليل الشامل (manpage) لأي أمر من أوامر جت:

$ git help <أمر>
$ git <أمر> --help
$ man git-<أمر>

مثلا، للحصول على صفحة مساعدة الأمر git config، نفّذ هذا:

$ git help config

هذه الأوامر جميلة لأنك تستطيع استخدامها في أي مكان، حتى عندما تكون غير متصل بالإنترنت. إن لم تكن صفحات المساعدة وهذا الك‍تاب كافيين واحتجت مساعدة شخصية، يمكنك تجربة إحدى قنوات IRC مثل #git أو #github أو #gitlab على خادوم Libera Chat، والذي تجده على https://libera.chat. هذه القنوات مليئة باستمرار بمئات الخبراء في جت والذين أغلب الأوقات يوَدّون المساعدة.

وإذا كنت غير محتاج إلى صفحة الدليل الكبيرة الكاملة، ولكن تحتاج فقط إلى تجديد معرفتك بالخيارات المتاحة لأحد أوامر جت، فيمكنك طلب المساعدة الموجزة بالخيار -h، مثل:

$ git add -h
usage: git add [<options>] [--] <pathspec>...

    -n, --dry-run               dry run
    -v, --verbose               be verbose

    -i, --interactive           interactive picking
    -p, --patch                 select hunks interactively
    -e, --edit                  edit current diff and apply
    -f, --force                 allow adding otherwise ignored files
    -u, --update                update tracked files
    --renormalize               renormalize EOL of tracked files (implies -u)
    -N, --intent-to-add         record only the fact that the path will be added later
    -A, --all                   add changes from all tracked and untracked files
    --ignore-removal            ignore paths removed in the working tree (same as --no-all)
    --refresh                   don't add, only refresh the index
    --ignore-errors             just skip files which cannot be added because of errors
    --ignore-missing            check if - even missing - files are ignored in dry run
    --sparse                    allow updating entries outside of the sparse-checkout cone
    --chmod (+|-)x              override the executable bit of the listed files
    --pathspec-from-file <file> read pathspec from file
    --pathspec-file-nul         with --pathspec-from-file, pathspec elements are separated with NUL character

الخلاصة

أنت الآن مُلم بماهية جت وكيف هو مختلف عن أي نظام إدارة نسخ مركزي ربما تكون استخدمه سابقا. وكذلك الآن لديك جت مثبتا على نظامك ومضبوطا بهويتك الشخصية. حان الآن موعد تعلم بعض أسس جت.