
لنفترض إن أنت مبرمج وشغال في شركة في مجال الوسائط والميديا، وأنت مكلف ببناء مشغل موسيقى المفروض إنه يدعم كل صيغ الملفات الصوتية، والمفروض تشتغل على ده أنت والتيم بتاعك، إزاي هتشتغلوا على تطوير المشغل ده في نفس الوقت بدون ما يحصل بينكم تعارض في التغييرات اللي بتتم؟ هنا بيجي دور جيت وجيت هب
إيه هو جت؟ جت هو نظام التحكم في الإصدار أو version control system وواضح من اسمه إن هو بيتيح ليك ميزة تتبع التغيرات اللي بتحصل على مشروعك ودا ياخدنا لأول ميزة بيوفها جت
-historical backupيعني لو عملت ميزة معينة تقدر تضيفها على البرنامج بتاعك وتحدث الإصدار الخاص بيه، وجيت في وقت ما حبيت تتراجع عن التغييرات دي فهو بيتيح ليك ميزة إنك تشوف الإصدارات اللي قبل كده وتتعامل معاها ودي حاجة اسمها historical backup الموضوع عامل كده زي زرار save as اللي موجود في معظم البرامج اللي بتستخدمها، معاك نسخة من الملف اللي شغال عليه، تقدر بعد ما تعمل تعديلات تحفظ نسخة جديدة خالص منه فيها الملف الأساسي بالتعديلات الجديدة وفي نفس الوقت الملف الأصلي موجود ومتغيرش وتقدر ترجله وتستخدمه أو تعدل عليه في أي وقت.
-team based development بمعنى إيه بيسمح لمجموعة أو فريق من المطورين العمل على نفس الكود في نفس الوقت بدون ما يحصل أي تعارض وبعد ما التعديلات دي تتم يدمجوها سوا وتتنفذ على المشروع الأساسي زي ما قولنا في الأول لنفترض إنك شغال على مشغل موسيقى أنت والفريق تباعك، وواحد من الفريق ده لقى إنه ممكن يضيف ميزة جديدة زي إنه يخلي المستخدم يقدر يعمل playlist يسمعها ورا بعض، يقدر يعمل التغيرات دي على النسخة اللي معاه وبعد كده يرفعها علشان يحصلها دمج مع النسخة الأصلية اللي كلكم شغالين عليها، بعد ما يتم الموافقة على الميزة دي، يقدر كل واحد فيكم يتعامل مع النسخة الجديدة بالميزة الجديدة ويكمل تطوير في البرنامج، بدون أي مشاكل وبدون تعارض بين اللي كل واحد بيعمله.
- command line جيت هو عبارة عن حاجة بتتعامل معاها عن طريق الكوماند لاين على جهازك الخاص، ولو أنت بتستخدم لينكس أو ماك فهو موجود بالفعل عندك، أما لو بتستخدم ويندور فبتحتاج تنزله من على النت وتستطبه عندك وتبدأ تشتغل.
- trunk based development يعني إيه الكلام ده؟ تعالوا نتخيل مع بعض جذع شجرة كده والجذع ده هو الكود الرئيسي للبرنامج، والجذع ده طالع منه أكثر من فرع ممكن نعتبر إن كل تغيير أحد العاملين على المشروع بيعمله هو عبارة عن التفرعة دي، والتفرعة دي بتقدر ترجعها تاني للجذع الرئيسي، وممكن أكتر من حد يعمله الموضوع ده.
أظن كده المفهموم وضح وعرفنا ايه هو جيت وعبارة عن ايه، تعالوا بقا نعرف إيه هو جيت هب وإيه علاقته بجيت؟
جيت هب هو عبارة عن موقع بيستخدم جت ولكن على الويب أو على الكلاود، مش على جهازك الخاص
علشان نوضح الفكرة أكتر خلينا ناخد مثال كمان، معلش الأمثلة كتير ولكن ده مهم علشان التصور يوصلكم بشكل كامل
دلوقت في مشروع موجود على جيت هب وانت معاك النسخه بتاعتك اللي شغال عليها، وحبيت تضيف ليها ميزة وبالفعل ضيفتها على نسخة المشروع بتاعتك بعد ما ضيفتها عاوز ده يوصل للنسخة الأصلية والناس تستخدمه، بترفعه بكل بساطة على نسخة المشروع الأصلية على جيت هب وبعدها بيكون متاح لكل الناس إنها تستخدم الميزة الجديدة اللي أنت ضيفتها دي
ولو مشروعك موجود بالفعل على جيت هب ومتاح للناس فأي شخص ممكن ياخد منه نسخة أو fork ويطور فيها بعيد عنك تماما ويعدل فيها ويطوعها لأغراضه هو واللي عاوز يعمله أو يكمل عليها.
ومن المميزات القوية في جت هب هي ميزة اختبار المشاريع، يعني لو عندك مشروع ممكن ترفعه وأي حد يقوم باختباره ويحط أي مشكلة قابلته علشان تحلها أنت وفريقك عن طريق إنه يفتح مشكلة جديدة ويحطها في المستودع الخاص بالمشروع علشان الناس اللي شغالة عليه تاخد بالها ويحلولها أو يفتحوا نقاش بخصوصها
في حاجات كتير غير جت هب بتستخدم نفس الأسلوب زي مثلا جت لاب، فالمهم نعرفه إن التقنية الأساسية والمشتركة بينهم كلهم هي جت
دلوقت أظن الصورة وضحتلكم، طيب لو عاوز تتعلم جت أو جيت هب تعمل ايه؟
مصادر تعلم جيت هب :
موقع كورسيرا
قناة الزيرو ويب سكول