اذهب إلى المحتوى

هدى جبور

الأعضاء
  • المساهمات

    26
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو هدى جبور

  1. هناك العديد من التطبيقات ذات الواجهة الرسومية التي تقدم واجهات رسومية سهلة ومريحة للتعامل مع أداة جيت Git التي تعمل في سطر الأوامر، وهذه التطبيقات ستكون موضوع مقالتنا. استخدام جيت في كيدي دولفين KDE Dolphin دولفين Dolphin هو مدير ملفات وجزء من مجموعة برامج كيدي KDE، وهو مدير الملفات الافتراضي للإصدار الحالي من مجموعة برامج كيدي 4، ويمكن تثبيته اختياريًا على بيئة سطح المكتب، ويحتوي على الكثير من الخيارات والميزات، وهو قابل للتوسيع إلى حد كبير ويسمح لك بتثبيت مكونات إضافية توفر المزيد من الميزات الرائعة، وأهمها إدارة مستودع جيت مباشرة من خلال واجهة دولفين الرسومية. بدايةً ستحتاج إلى التأكد من تثبيت الإضافات، فبعض التوزيعات من دولفين تأتي مع عدد كبير جدًا من الإضافات، بينما يأتي بعضها الآخر مع الإضافات الأساسية فقط. لذلك إذا كنت لا ترى خيارات جيت في الخطوات القليلة التالية التي سنُجريها، فابحث في مستودعك عن شيء مثل dolphin-extras أو dolphin-plugins. لتفعيل إضافة جيت، انتقل إلى قائمة الإعدادات Settings في أي نافذة لدولفين واختر ضبط دولفين Configure Dolphin، ثم انقر فوق أيقونة الخدمات Services في العمود الأيسر، ثم ابحث ضمن قائمة المكونات الإضافية المتاحة حتى تجد جيت. احفظ التغييرات وأغلق نافذة دولفين وعندما تعيد تشغيل دولفين، انتقل إلى مستودع جيت وستلاحظ أن جميع الأيقونات تحتوي الآن على شعارات: المربعات الخضراء للملفات المخصصة، والمربعات الخضراء السميكة للملفات المعدلة، ولا يوجد أيقونات للملفات غير المتتبعة، وهكذا. الآن عند النقر بزر الفأرة الأيمن داخل مستودع جيت ستجد العديد من الخيارات، مثل تنفيذ عمليات checkout أو push أو pull، وحتى تنفيذ عمليات git add و git remove على ملفاتك. لا يمكنك نسخ مستودع أو تغيير المسارات للمستودعات البعيدة في دولفين، حيث يتعين عليك الذهاب إلى الطرفية من خلال النقر على F4 لإتمام هكذا أمر. إن هذه الميزة من كيدي رائعة للغاية، ولا يمكن أن ينتهي الحديث عنها عند هذا الحد. إن دمج جيت مع مدير الملفات لديك، يجعل العمل مع جيت سهلًا بتنفيذ الأوامر لك في الخلفية مما يجعلها وكأنها غير مرئية ويخفي تعقيدها لك، فكل ما تحتاجه يمكنك تنفيذه ببساطة بغض النظر عن المرحلة التي أنت عندها الآن. سباركل شير SparkleShare سباركل شير SparkleShare هو عبارة عن تطبيق سحابي مفتوح المصدر للتخزين السحابي ومزامنة الملفات، ويستخدم افتراضيًا جيت كخلفية للتخزين. يُمكن تشبيهه بتطبيق Dropbox، ويمكن استخدامه على جميع الأنظمة المعروفة تقريبًا. إذا كنت تعمل على نظام لينكس، فيمكنك تثبيته من مستودع البرامج software repository الخاص بك، أما في حال كنت تعمل على نظام تشغيل آخر فيمكنك تنزيله من موقع سباركل شير، وتجدر الملاحظة إلى أنه بإمكانك تجاهل التعليمات الموجودة على موقع سباركل شير بأمان، والتي تتعلق بإعداد الخادم، وهذا ليس ما سنفعله هنا. عمومًا، يمكنك إعداد خادم سباركل شير إذا كنت تريد ذلك، ولكن سبارك لشير متوافق مع أي مستودع جيت، لذلك لا تحتاج إلى إنشاء خادم خاص بك. بعد تثبيته اذهب وشغل سبارك لشير، ثم انتقل إلى معالج الإعداد setup wizard، حيث ستحتاج إلى إكمال خطوتين بالإضافة إلى برنامج تعليمي مُختصر، وستتمكن أيضًا من إضافة اختصار على سطح المكتب في حال رغبت بذلك. الآن ستلاحظ وجود أيقونة برتقالية اللون تمثل مجلد سباركل شير في شريط المهام على جهازك، وفي البداية يكون سباركل شير غافل عن أي شيء موجود على حاسوبك، لذلك تحتاج إلى إضافة مشروع مُستضاف Hosted project. لإضافة مجلد إلى سباركل شير لكي يتتبعه، انقر فوق أيقونة سباركل شير من شريط المهام وحدد Add Hosted Project. بإمكان سباركل شير العمل مع مشاريع جيت ذاتية الاستضافة، أو المشاريع المستضافة على خدمات جيت العامة مثل جيت هاب GitHub وبيت بوكيت BitBucket، ولتتمكن من الوصول الكامل لمشروعك، غالبًا ستحتاج إلى استخدام مُعرّف العميل Client ID الذي تمنحك إيّاه سباركل شير، وهو مفتاح SSH يعمل كمفتاح مصادقة مع الخدمة التي تستخدمها لاستضافة مشروعك، وهذا يشمل أيضًا خادم جيت الخاص بك والذي يجب أن يستخدم أيضًا المفتاح SSH بدلًا من تسجيل الدخول باستخدام كلمة المرور. إذًا انسخ معرّف العميل ضمن ملف authorized_hosts المخصص لك كمستخدم لجيت على الخادم، أو في لوحة مفاتيح SSH لمضيف جيت الذي تستخدمه. بعد إعداد المضيف الذي تريد استخدامه، يُحمّل سباركل شير مشروع جيت، كما يوفر لك إمكانية تنزيل سجل الإيداعات حسب اختيارك، ويمكنك رؤية الملفات في "SparkleShare/~". على عكس جيت المدمج في دولفين، فإن سباركل شير لا يزعجك بالإشعارات والتعقيدات إلى حد كبير جدًا، فعندما تُجري بعض التغييرات تتم مزامنة التغيير مع المستودع البعيد تلقائيًا في الخلفية أو عندما يُجري أحد شُركائك تغييرًا على المستودع سيجلبه ويحدث ملفاتك. بالنسبة للعديد من الأشخاص يكون ذلك مفيدًا، لكن البعض قد لا يحبذ ذلك لأنهم يرغبون بالتحكم بكل العمليات التي تحدث. جيت-كولا Git-Cola جيت-كولا Git-Cola هي واجهة رسومية أنيقة أخرى للعمل مع مستودعات جيت، وبدلًا من استخدام التطبيقات المدمجة للتفاعل مع مشروعك على جيت، يمكنك استخدام تطبيق مكتبي لمراقبة التغييرات التي تحدث على مشروعك والتعامل معها بالطريقة التي تختارها. من ميزات هذا التطبيق هي التركيز، فربما أنت لا تهتم بكل ملفات مشروعك البالغ عددها 125، حيث أنك تهتم فقط بعدد محدد منها ولنقل 3 ملفات فقط، لذلك يكون من الجيد وضع الملفات الأكثر أهمية في المقدمة. إذا كنت تعتقد أن هناك الكثير من خدمات الاستضافة لجيت على الويب، فأنت لم تر أي شيء بعد، فتطبيقات جيت المكتبية أكثر بكثير. في الحقيقة، جيت نفسه يحتوي ضمنيًا على واجهة رسومية. إن أكثر البرامج متعددة المنصات Cross-platform وأكثرها قابلية للتكوين هو تطبيق جيت-كولا مفتوح المصدر الذي كُتِب بلغة Python و Qt. إذا كنت تستخدم نظام لينوكس، فقد يكون جيت-كولا في مستودع البرامج لديك، وإلا نزِّله من الموقع وثبته على نظامك: $ python setup.py install عندما يتم تشغيل جيت-كولا، يكون لديك ثلاثة أزرار: الأول لفتح مستودع موجود والثاني لإنشاء مستودع جديد والثالث لنسخ مستودع موجود، وبغض النظر عن الزر الذي ستختاره، سيكون لدينا في النهاية مستودع جيت. جيت-كولا ومعظم التطبيقات المكتبية الأخرى، لا تحاول أن تجعل كل العمليات تتم من خلال الواجهة، وإنما يتركون ذلك لأدوات نظام التشغيل مثل ثونار Thunar وإيماكس Emacs وغيرهما، أي بمعنى آخر قد أبدأ بإنشاء مستودع من خلال جيت-كولا، لكن بعد ذلك سأفتح هذا المستودع من خلال ثونار أو إيماكس لبدء العمل مع الإبقاء على جيت-كولا مفتوحًا كشاشة مراقبة، لأن إنشاء ملفات جديدة أو تغيير الملفات الموجودة، ستظهر في لوحة الحالة لجيت-كولا. التصميم الافتراضي لجيت-كولا غير ثابت إلى حد ما، أي أنه بإمكانك تغيير تصميم الواجهة الرسومية كما تحب، فمثلًا في الصورة التالية تم تغيير عدة أمور في تصميم الواجهة، حيث تم جعل اللوحة الموجودة في أقصى اليسار هي الحالة Status مع إظهار أي تغييرات يتم إجراؤها على الفرع الحالي ضمنها أيضًا، وفي اليمين لوحة Diff لمراجعة تغيير، ولوحة الإجراءات Actions لأزرار الوصول السريع إلى المهام الشائعة، وأخيرًا اللوحة الموجودة في أقصى اليمين هي لوحة Commit لكتابة رسائل الإيداع. عمومًا، أيًّا كان تصميمك، فما يلي هو شرح للمكونات التي تظهر في واجهة جيت-كولا: تظهر التغييرات في لوحة الحالة Status panel. انقر بزر الفأرة الأيمن فوق إدخال تغيير، أو حدد ملفًا وانقر فوق الزر Stage في لوحة الإجراءات Action، لجعل الملف ملفًا مرحليًّا (ملف مُدرج). تتغير أيقونة الملف المرحلي إلى مثلث أخضر للإشارة إلى أنه تم تعديله وإدراجه، ويمكنك لاحقًا إلغاء إدراجه عن طريق النقر بزر الفأرة الأيمن واختيار Unstage، أو بالنقر فوق الزر Unstage في لوحة الإجراءات. في أي وقت يمكنك مراجعة التغييرات من لوحة Diff، وعندما تكون جاهزًا للإيداع أدخل رسالة الإيداع وانقر فوق الزر "Commit". توجد أزرار أخرى في لوحة الإجراءات للمهام الشائعة الأخرى مثل git pull أو git push، وغيرها الكثير من الأوامر. قد يبدو أن جيت-كولا أقل تفاعلية من مدير ملفات متكامل تمامًا ومخصّص لجيت، ولكنه من ناحية أخرى يقدم عمليًا كل ما يفعله جيت، لذلك فهو في الواقع أكثر قوة، ويفيد المستخدمين في تعلم جيت أثناء استخدامه، ويشعر الخبراء بالراحة من خلال استخدام الواجهة والمصطلحات. جيت أو الواجهات الرسومية لجيت؟ هذا الأمر يتعلق بما يتناسب مع رغباتك وطريقة عملك، فالبعض يفضل استخدام جيت عبر سطر الأوامر والبعض الآخر يفضل استخدامه من خلال الواجهات الرسومية. سنتعلم في المقال التالي كيفية إعداد خادم جيت وإدارته، وهذا يشمل آلية وصول المستخدم والإدارة، وتشغيل البرمجيات المخصصة. ترجمة -وبتصرف- للمقال 3 graphical tools for Git لصاحبه Seth Kenlon. اقرأ أيضًا المقال التالي: كيفية بناء خادم جيت لـ Git المقال السابق: كيفية استعادة إصدارات الملفات القديمة في جيت Git مدخل إلى نظام التحكم في النسخ Git الأسئلة العشرة الأكثر تكرارا حول Git
  2. ستتعلم في مقال اليوم كيفية معرفة موقعك الحالي ضمن السجل الزمني لمشروعك، وكيفية استعادة الإصدارات القديمة للملفات، وكيفية إنشاء فروع branch في جيت حتى تتمكن من تجربة أفكارك الجديدة والعبث بالملفات بأمان. يتم تحديد مكان تواجدك في سجل المشروع من خلال مؤشر يُسمى الرأس HEAD، وللانتقال عبر السجل الزمني لمشروعك، يجب عليك تحريك هذا الرأس ليشير إلى المكان الذي تريد، وهذه العملية تتم من خلال الأمر git checkout. هناك طريقتان لاستخدام هذا الأمر، الأولى هي استعادة ملف من خلال العودة إلى إيداع سابق (استعادة الملف إلى الحالة التي تم إيداعه بها في وقت سابق)، والثانية هي الانتقال إلى فرع آخر. استعادة ملف في مستودع git كثيرة هي السيناريوهات التي قد تؤول بنا إلى الحاجة إلى استعادة حالة حُفِظ فيها الملف في نقطة زمنية سابقة؛ على سبيل المثال أثناء عملنا على أحد الملفات وتحقيقنا تقدمًا جيدًا للغاية في العمل عليه، ثم إضافته ثم إيداعه، ثم بعد شرب فنجان شاي وأخذ قسط من الراحة نستنتج أننا بحاجة إلى تعديل آخر، وخلال إجراء هذا التعديل نلاحظ أن ما فعلناه كان عبثًا، فنندم وتؤول بنا الحاجة إلى استعادة الملف إلى حالته السابقة (قبل هذه الفوضى)، وهنا يأتي دور الأمرgit checkout، حيث يتجلى الحل بالعودة إلى آخر إيداع نفذته، وفي هذه الحالة فهو يمثل الرأس: $ git checkout HEAD filename في حال قمت بإيداع إصدار سيئ لملفٍ ما من دون قصد، ودعت بك الحاجة إلى العودة إلى إيداع سابق، فابحث في سجل جيت لمشروعك لمعرفة الإيداعات السابقة التي قمت بتنفيذها، ثم اختر الإيداع الذي تراه مناسبًا: $ git log --oneline سيكون الخرج: 79a4e5f bad take f449007 The second commit 55df4c2 My great project, first commit. إن أردت الانتقال إلى الإيداع الأول ذي المعرف 55df4c2 فنفذ ما يلي: $ git checkout 55df4c2 filename الآن، بفرض أنك استعدت الإصدار الأقدم من الملف إلى موقعك الحالي (بإمكانك الاطلاع على موقع الحالي من خلال الأمر git status)، فستحتاج إلى إضافة الملف، ثم إيداعه لأنه تغير. $ git add filename $ git commit -m 'restoring filename from first commit.' يمكنك الآن أن تبحث في سجل جيت للتحقق مما فعلته: $ git log --oneline d512580 restoring filename from first commit 79a4e5f bad take f449007 The second commit 55df4c2 My great project, first commit. العودة في الخط الزمني الطريقة الأخرى لاستعادة ملف هي إرجاع مشروع جيت بأكمله، وهذا يمكن اعتباره مقدمة لفكرة الفروع. عندما تعود في السجل إلى الخلف، فهذا يعني أنك قد أرجعت الرأس إلى إصدار سابق من مشروعك، في الشيفرة التالية سنجعل المشروع يعود بأكمله إلى الحالة التي كان عليها عند الإيداع الأول: $ git log --oneline d512580 restoring filename from first commit 79a4e5f bad take f449007 The second commit 55df4c2 My great project, first commit. $ git checkout 55df4c2 إن العودة بهذه الطريقة قد يكون خَطِرًا ما لم تكن متأكدًا مما تفعله، لأن هذا الأمر يؤدي إلى تدمير كل ما أنجزته في مشروعك، وسيعود بك إلى حالة الإيداع الأول. افتراضيًّا، يفترض جيت أنك لا تريد القيام بذلك، لذا فهو يفصل الرأس عن المشروع ويتيح لك العمل حسب الحاجة دون الكتابة فوق الملفات السابقة، أي كأنه إجراء وقائي، واعتمادًا على ذلك يمكننا الانطلاق بفكرة الفروع، ففي هذه الحالة تكون الخطوة الأفضل هي أن نُنشئ فرعًا جديدًا بعد العودة بكامل المشروع إلى الإيداع الأول. إذًا في كثير من الحالات، ومنها ما رأيته في الحالة السابقة، أو في حال أردت تجريب نهج مختلف خلال رحلة تطوير العمل، أو في حال خطرت في ذهنك فكرة جديدة تتطلب العديد من التغييرات وشعرت أنك بحاجة إلى تجريبها أولًا لرؤية إذا ما كانت تعطي نتائج أفضل بالفعل، فإن الطريقة الآمنة للقيام بذلك هي إنشاء فرع جديد. تشبه هذه الفروع تقريبًا إنشاء نسخة جديدة من الشيفرة البرمجية الخاصة بك كما هي في الوقت الحالي، والتي يمكن استخدامها بعد ذلك لتطوير شيفرة جديد، وبمزيد من التفصيل. يُقصَد بالتفريع Branching الانتقال للعمل على خط تطوير مغاير لخط التطوير الرئيس والاستمرار في العمل على هذا الخط دون تداخل مع الخط الرئيس، وبذلك تكون قادرًا على تجريب فكرتك الجديدة، وبنفس الوقت تستطيع أن تكمل من حيث توقفت مع فكرتك الأولى في حال رأيت أن فكرتك الجديدة فاشلة، كما يمكنك دمجها مع الفرع الرئيس في حال رأيت أن هذه الفكرة أو هذا النهج أعطى نتائج أفضل. لإنشاء فرع جديد في جيت والانتقال إليه، يمكنك استخدام الأمر التالي: $ git checkout -b remix Switched to a new branch 'remix' أو يمكنك استخدام الكود التالي لإنشاء فرع جديد، لكن دون الانتقال إليه: git branch <branch-name> بذلك تكون قد أنشأت الفرع الجديد، لكنك تبقى في الفرع الأساسي، وفي حال أردت الانتقال إلى الفرع الجديد، استخدم الأمر: git checkout <branch-name> يمكنك أيضًا إنشاء فرع جديد، من فرع آخر (أي ليس من الفرع الحالي)، من خلال الأمر: git checkout -b <new-branch-name> <from-branch-name> الآن في حال رأيت أن فكرتك الثانية أو أن النهج الجديد فاشل، يمكنك العودة ببساطة إلى الفرع الرئيس: $ git checkout master أما إذا رأيت أنها تعطي نتائج أفضل، فعد إلى فرعك الرئيس وادمجها ضمنه: $ git checkout master $ git merge remix فكرة الفروع هي ميزة رائعة وقوية من جيت، ومن الشائع للمطورين إنشاء فرع جديد فور استنساخ المستودع؛ بهذه الطريقة، يتم احتواء جميع أعمالهم في فرعهم الخاص، ثم يمكنهم لاحقًا دمجه في الفرع الرئيسي. لا توجد طريقة "صحيحة" أو "خاطئة" في استخدام الفروع، ولكن التفريع يجعل من السهل فصل المهام والمساهمات، كما أنه بإمكانك إنشاء العدد الذي تريده من الفروع. العمل على المستودعات البعيدة أصبحت تعرف الآن كيفية الاحتفاظ بالمستودع على جهازك المحلي والتعامل معه، ولكن ماذا عن استخدامه عندما تعمل مع المساهمين الآخرين؟ لتتمكن من التعاون مع المساهمين الآخرين في أي مشروع من خلال جيت، تحتاج إلى معرفة كيفية إدارة مستودعاتك البعيدة. المستودعات البعيدة هي إصدارات من مشروعك تتم استضافتها على الإنترنت أو الشبكة في مكان ما، ويمكن أن يكون لديك العديد من المستودعات، ويكون كل منها مخصص لك إما للقراءة فقط أو للقراءة والكتابة. يتضمن التعاون مع الآخرين إدارة هذه المستودعات البعيدة ودفع البيانات Push وسحبها pull منها وإليها عندما تحتاج إلى مشاركة العمل. تتضمن إدارة المستودعات البعيدة معرفة كيفية إضافة مستودعات بعيدة، وإدارة مختلف الفروع البعيدة وتعريفها على أنها متتبعة أم لا، وغيرها العديد من الأمور الأخرى. هناك العديد من الطرق لإعداد جيت، بحيث يمكن للعديد من الأشخاص العمل في مشروع في وقت واحد، لذلك سنركز في الوقت الحالي على العمل على نسخة معينة، سواء حصلت على هذه النسخة من خادم جيت المخصص لشخص ما أو من صفحة جيت هاب، أو من محرك أقراص مشترك على نفس الشبكة. الفرق الوحيد بين العمل في مستودع جيت الخاص بك والعمل على شيء تريد مشاركته مع الآخرين هو أنه في مرحلة ما، تحتاج إلى دفع تغييراتك إلى مستودع شخص آخر. نُطلق على المستودع الذي تعمل عليه اسم "المستودع المحلي" وأي مستودع آخر اسم "المستودع بعيد". عندما تقوم بنسخ مستودع مع أذونات قراءة وكتابة من مصدر آخر، فإن نسختك ترث المستودع البعيد كما هو كاملًا، وسيكون الاسم الافتراضي للمستودع الذي تم تنزيله هو origin، وهو الاسم المختصر الافتراضي الذي يعطيه جيت للخادم الذي نسخت منه المستودع، ويستخدم الاسم المختصر كمرجع للدلالة على المستودع بدلًا من كتابة مساره كاملًا (عنوان URL لذاك المستودع). يمكننا تغيير اسم المستودع من الأصل origin إلى اسم آخر أيضًا. عادة ما يحتفظ الناس باسم المستودع "الأصل" نفسه، لكن من الضروري تغيير اسم المستودع المحلي (المستودع الذي قمت بتنزيله على جهازك) إذا كان هناك العديد من المستودعات (المشاريع) التي تعمل عليها. يمكن استخدام الأمر التالي الذي يُظهر مسارات URL التي خزنها جيت للاستخدام عند القراءة من المستودع أو الكتابة فيه، وإن كان لديك أكثر من مستودع بعيد فسيعرضها كلها. $ git remote --verbose origin seth@example.com:~/myproject.Git (fetch) origin seth@example.com:~/myproject.Git (push) الحصول على نسخة من المستودع البعيد أمرًا مفيدًا، لأنه بمثابة أخذ نسخة احتياطية يمكن العمل عليها من خارج الموقع الذي يستضيفها، كما أنه يسمح لشخص آخر بالعمل في المشروع. يمكنك إضافة مستودع جديد باسم مختصر يعد مرجعا للمستودع، من خلال الأمر التالي: git remote add [shortname] [url] على سبيل المثال: $ git remote add seth@example.com:~/myproject.Git إذا قمت بإجراء تعديلات على الملفات وأردت إرسالها إلى المستودع البعيد ولديك أذونات القراءة والكتابة في المستودع، فاستخدم الأمر git push: git push [remote-name] [branch-name] حيث [remote-name] يمثل الفرع على الخادم البعيد و [branch-name] على الخادم المحلي، حيث أنه في المرة الأولى التي تدفع فيها التغييرات يجب عليك أيضًا إرسال معلومات الفرع الخاص بك، ومن الأفضل دومًا عدم العمل على الفرع الرئيسي master، ما لم يُطلب منك القيام بذلك: $ git checkout -b seth-dev $ git add exciting-new-file.txt $ git commit -m 'first push to remote' $ git push -u origin HEAD يؤدي هذا إلى دفع موقعك الحالي HEAD والفرع الموجود عليه إلى المستودع البعيد، وبعد أن تقوم بدفع فرعك أول مرة يمكنك الاستغناء عن الخيار ‎-u: $ git add another-file.txt $ git commit -m 'another push to remote' $ git push origin HEAD دمج الفروع عندما تعمل بمفردك في مستودع جيت، يمكنك دمج أي فرع ضمن فرعك الرئيسي وقتما تشاء، أما عند العمل جنبًا إلى جنب مع أحد الشُركاء، فمن المحتمل أن ترغب في مراجعة التغييرات قبل دمجها في الفرع الرئيسي الخاص بك: $ git checkout contributor $ git pull $ less blah.txt # review the changed files $ git checkout master $ git merge contributor إذا كنت تستخدم جيت هاب GitHub أو جيت لاب GitLab أو أي خدمة ويب مشابهة، فالعملية تكون مختلفة، فهناك من المعتاد أن تنسخ المشروع وتعامله كما لو كان مستودعك الخاص، حيث يمكنك العمل في المستودع وإرسال التغييرات إلى حسابك على جيت هاب أو جيت لاب دون الحصول على إذن من أي شخص، لأنه المستودع الخاص بك. إذا كنت تريد أن يتلقى الشخص الذي نسخت مشروعه تغييراتك، فيمكنك إنشاء طلب سحب pull request، من خلال الواجهة الخلفية لخدمة الويب وذلك لإرسال تعديلاتك إلى المالك الأساسي والسماح له بمراجعة التغييرات وسحبها. عادةً ما يتم تنفيذ المشاريع من خلال خدمة ويب مثل جيت هاب، لكن جميع أوامر جيت لإدارة نسختك من المشروع تبقى نفسها بما في ذلك عملية الدفع push، وعندما تريد إرسال تغييراتك تعود إلى خدمة الويب لفتح طلب سحب كما ذكرنا، وبذلك يتم إنجاز المهمة. خاتمة انتهينا من المقال الذي شرحنا فيه طرق استعادة نسخ قديمة من الملفات الموجودة في مستودع git وكيفية التعامل مع المستودعات والفروع فيما يخص ذلك، وسنلقي في المقال القادم نظرةً على بعض الوظائف الإضافية الملائمة لمساعدتك على دمج جيت بشكل مريح في سير عملك اليومي. ترجمة -وبتصرف- للمقال How to restore older file versions in Git لصاحبه Seth Kenlon. اقرأ أيضًا المقال التالي: أدوات رسومية للأداة سطر الأوامر جيت Git المقال السابق: إنشاء أول مستودع لك من خلال جيت Git الإشراف على مشاريع البرمجيات مفتوحة المصدر عبر غيت هب GitHub
  3. سنتعرف الآن عن كيفية إنشاء مستودع جيت Git خاص بك، وكيفية إضافة الملفات إلى هذا المستودع وتنفيذ عمليات الإيداع. تحدثنا في المقالات السابقة عن كيفية التفاعل مع جيت كمستخدمين نهائيين، حيث نذهب إلى المشروع المفتوح المصدر المنشور على جيت ونقوم بنسخه إلى جهازنا للاستفادة منه. من المعروف أن جيت هي الأداة الأفضل للتعامل مع المشاريع البرمجية الكبيرة أو الصغيرة، وحتى المشاريع الغير برمجية كما سبق وتحدثنا في المقالة الأولى، فمن الممكن أن تستخدمها لإدارة إصدارات مجلة أو يوميات أو رواية أو غيرها. آلية عمل جيت عندما نتحدث عن التصوير الحاسوبي (التصوير الرقمي)، فإننا نميل إلى تسميته باللقطات snapshots، أي وكأنه ألبوم صور يحتوي على صور في لحظات زمنية مختلفة، لكن عند التحدث عن جيت فربما يكون التسجيل الصوتي التشابهي وصفًا مناسبًا أكثر. أقراص أشرطة الاستديو التقليدية تحتوي على عدة مكونات، مثل البكرات التي تدور للأمام أو للخلف، وشريط لحفظ الموجات الصوتية، ورأس تشغيل لاكتشاف الموجات الصوتية على الشريط وإخراجها للمستمع. هذه الأشرطة يمكنك تشغيلها للأمام، كما يمكنك إرجاعها للعودة إلى نقطة سابقة محددة في الشريط، كما يمكنك تقديمها للأمام إلى نقطة لاحقة. الآن تخيل معي فرقة موسيقية في السبعينات تسجل على شريط، من المنطقي أن هذه الفرقة تتدرب مرارًا وتكرارًا على أجزاء هذه الأغنية بغية الوصول إلى الأداء المثالي، ثم بعد ذلك إنتاج الأفكار الأساسية أو الهياكل أو الترتيب الذي سيطورون منه العمل الموسيقي الخاص بهم، فربما يقررون البدء بتسجيل أصوات الطبول، ثم الجيتار، ثم الكمان، ثم الغناء. الآن في كل مرة تؤدي فيها الفرقة تسجيلًا لأحد الأصوات السابقة، يُعيد مهندس الاستوديو لف الشريط إلى نقطة البداية، أي أنه يتم تشغيل الصوت السابق في الخلفية أثناء تسجيل الصوت الثاني، أي عندما تقوم بعزف الغيتار سيكون صوت الطبول في الخلفية، وهذا ما يسمى بوضع الحلقة، حيث تتم إعادة الشريط إلى البداية بعد تسجيل كل صوت. يمكنك أيضًا نسخ واستبدال بكرة من الشريط بالكامل، في حال أردت مزج شيء جديد لاحقًا. الآن بعد أن تعرّفنا على آلية التسجيل الصوتي في السبعينات، يمكننا أن نشبه هذه الآلية بآلية عمل جيت. إنشاء مستودع جيت أول خطوة هي الذهاب إلى أحد المتاجر وشراء شريط التسجيل، وهذا يكافئ المستودع في جيت حيث سننجز فيه كامل العمل الخاص. يمكن لأي مجلد موجود على حاسوبك أن يصبح مستودعًا لجيت، لكننا الآن سنقوم بإنشاء مستودع جديد عن طريق ثلاث أوامر: إنشاء مجلد جديد (يمكنك أيضًا إنشاؤه مباشرةً من خلال واجهة المستخدم الرسومية). الانتقال إلى موقع المجلد من خلال الطرفية. تهيئته بحيث يصبح مجلدًا يديره جيت. وهذه هي الأوامر المطلوبة بالترتيب: $ mkdir ~/jupiter # make directory $ cd ~/jupiter # change into the new directory $ git init . # initialise your new Git repo الآن أصبح المجلد jupiter عبارة عن مستودع جيت ولكنه فارغ حاليًّا. هذا كل ما يتطلب الأمر منك لإنشاء مستودع، ومن الآن أصبح بإمكانك نسخه والرجوع إلى الخلف أو الأمام في التاريخ، وإنشاء مخططات زمنية بديلة، وكل الأمور الأخرى التي يوفرها لك جيت. العمل داخل مستودع جيت هو نفس العمل الذي تنجزه مع أي مجلد آخر؛ بمعنى عمليات إنشاء الملفات أو نسخها داخل المجلد أو حفظ الملفات فيه وغيرها من العمليات الأخرى هي نفسها مع المجلدات العادية، وجيت لا تؤدي أي عملية إلى عندما تستدعيها. في مستودع جيت المحلي، يمكن أن يكون الملف بإحدى الحالات التالية: غير متتبع Untracked: ملفات يتم إنشاؤها في المستودع، ولكن لم تتم إضافتها إلى جيت حتى الآن. متتبع Tracked: ملف تمت إضافته إلى جيت. مُدرج Staged: ملف مُدرج (أو مرحلي)، أي تم إدراجه تمهيدًا إلى إيداعه في مستودع جيت. أي ملف تضيفه إلى مستودع جيت يكون في البداية ملف غير متتبع، أي أن الملف يكون موجود على حاسوبك، لكنك لم تخبر جيت عنه حتى الآن. جيت يخبرك بالملفات التي يتم تتبعها والتي لا يتم تتبعها من خلال الأمر git status: $ echo "hello world" > foo $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) foo nothing added but untracked files present (use "git add" to track) كما تلاحظ، يخبرك جيت أيضًا بكيفية بدء تتبع الملفات. استخدام جيت من خلال خدمات الويب الشهيرة إنشاء المستودعات في جيت هاب Github وجيت لاب Gitlab أكثر سهولة، فكل ما عليك فعله هو نقرة على الزر New Repository واتباع التعليمات، ومن الممارسات الجيدة عند إنشاء المستودعات إنشاء ملف README، هذا الملف عبارة عن توضيح للهدف الذي تم إنشاء المستودع من أجله. بالنسبة لنسخ المستودع فلا يختلف الأمر عن المعتاد، لكن الحصول على إذن الكتابة على هذا المستودع في جيت هاب أكثر تعقيدًا إلى حد ما، لأنه من أجل المصادقة على جيت هاب، يجب أن يكون لديك مفتاح SSH. في حال كنت تعمل على حاسوب مثبت عليه إحدى توزيعات لينوكس، فيمكنك إنشاء مفتاح من خلال الأمر التالي: $ ssh-keygen ثم انسخ مفتاحك الجديد، وهو نص عادي يمكنك فتحه في محرر نص عادي، أو استخدام الأمرcat: $ cat ~/.ssh/id_rsa.pub الآن الصق مفتاحك في ملف ضبط SSH الخاص بجيت هاب، أو تكوين GitLab الخاص بك. بما أنك نسخت مشروع جيت هاب الخاص بك عبر مفتاح SSH، ستتمكن من إعادة الكتابة إلى المستودع الخاص بك. أو كحل بديل، يمكنك استخدام واجهة تحميل الملفات الخاصة بغيت هاب لإضافة الملفات دون الحاجة إلى استخدام جيت على نظامك. الملفات المتتبعة كما لاحظت منذ قليل عندما استخدمت الأمر git status، فهو يخبرك بضرورة إضافة الملف لكي يبدأ بتتبعه، وذلك من خلال الأمر git add الذي يقوم بوضع الملف في منقطة مرحلية خاصة تنتظر فيها الملفات إلى حين إيداعها، أو الاحتفاظ بها ضمن لقطة snapshot إلى وقت لاحق. الهدف من الأمر git add هو التمييز بين الملفات التي تريد تضمينها في لقطة، والملفات الجديدة أو المؤقتة التي تريد أن يتجاهلها جيت، على الأقل في الوقت الحالي. بمجرد إضافة ملف، سيتعرف عليه جيت كملف متتبع: $ git add foo $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: foo إن إضافة الملف من خلال الأمر git add لا تؤدي إلى إضافة الملف إلى نظام التتبع في جيت مباشرةً، وإنما يجهزه لذلك، أي أنه يصبح في حالة مرحلية كما ذكرنا، وفي هذه الأثناء يظل بإمكانك إجراء التعديلات عليه قبل إيداعه. لكن انتبه، طالما لم تقم بإيداعه بعد، فلن تتمكن من العودة بالزمن للوراء، أي مثلًا في حال كنت قد وصلت لحالة مثالية في مشروعك، ثم جاء أحد أطفالك وبدأ العبث بحاسوبك ومسح كل ما أنجزته، فستكون في ورطة. إذا رأيت أن الملف ليس جاهزًا حقًا ليتم إيداعه (حفظه في سجلات جيت)، فيمكنك حينئذٍ إخراجه من المنطقة المرحلية، تمامًا كما وصفت رسالة جيت التي رأيناها منذ قليل: $ git reset HEAD foo إيداع الملفات في لحظةٍ ما لابد وأن تقرر إيداع ملفاتك، وخلال دورة حياة المشروع تختلف عدد المرات التي تقوم فيها بإيداع ملفاتك، وهذا يعود لك بالطبع، فكلما احتجت حفظ حالة معينة لحالة الملفات يجدر بك تنفيذ هذا الأمر، على سبيل المثال في حال كنت تقوم ببناء واجهة رسومية، وفي لحظةٍ ما نجحت في إظهار شكل محدد ضمن هذه الواجهة، فربما ترغب بحفظ ملفاتك عند هذه الحالة (لكيلا يُفاجئك طفلك مثلًا). إن تنفيذ أمر الإيداع يعني تسجيل جميع الملفات الموجودة ضمن المنطقة المرحلية في المستودع، أي أن جيت يسجل الملفات التي يتم تعقبها، أي الملفات التي تمت إضافتها من خلال الأمر git add والتي تم تعديلها منذ آخر إيداع، وفي حال لم يكن هناك أي إيداع سابق، فسيتم تضمين جميع الملفات المتتبعة في الإيداع لأنها انتقلت من حالة غير موجود إلى موجود، وهذا يمثل تعديل كبير جدًا من وجهة نظر جيت. لتنفيذ عملية الإيداع نستخدم الأمر التالي: $ git commit -m 'My great project, first commit.' هذا يؤدي إلى حفظ جميع الملفات ضمن نقطة زمنية ثابتة لديها مؤشر مرجعي للرجوع إلى هذا الإيداع (هذه النقطة) في سجل جيت الخاص بك: $ git log --oneline 55df4c2 My great project, first commit. للحصول على تقرير مفصل أكثر، يمكنك استخدام الأمر git log دون خيار ‎--oneline. الرقم المرجعي للإيداع في هذا المثال هو 55df4c2، ويطلق عليه قيمة الإيداع المشفرة commit hash، ويمثل كل الأشياء التي سجلتها جنبًا إلى جنب مع التسجيلات السابقة، وفي حال أردت الرجوع إلى حالة سابقة (نقطة زمنية)، فيمكنك استخدام هذا الرقم المرجعي للعودة إلى الخلف، وكلما قمت بالمزيد من التغييرات والإيداعات، زاد عدد هذه التجزئات التي تعمل كمراجع إلى إصدارات مختلفة من إنتاجك، ولهذا السبب يطلقون على جيت نظام التحكم في الإصدار. في المقالة التالية، سوف نتعرف على الأمر git head بتفصيل أكبر، وسنكتشف معًا كيفية السفر عبر الزمن في جيت. ترجمة -وبتصرف- للمقال Creating your first Git repository لصاحبه Seth Kenlon. اقرأ أيضًا المقال التالي: كيفية استعادة إصدارات الملفات القديمة في جيت Git بدء العمل مع نظام إدارة الإصدارات جيت Git الدليل المرجعي للعمل على نظام غيت Git إعداد Git للمرة الأولى
  4. تحدثنا في المقالة السابقة عن جيت Git وعن الغرض الذي يؤديه ومن بإمكانه استخدامه، أما اليوم سنتحدث عن كيفية نسخ مستودعات جيت العامة، وعن كيفية استخراج ملفات محددة دون الحاجة إلى نسخ كامل العمل. جيت أداة مشهورة وتحظى بشعبية كبيرة جدًا ولاسيما عند المبرمجين لكونها تجعل عملية إدارة الإصدارات أمرًا أكثر سهولة ورتابة، لذا لابد لك من تعلمها. بدايةً، لابد لك من فهم أساسيات جيت حتى تتمكن من استخدامه لتنزيل ما تحتاجه من ملفات أو حتى المساهمة في الأعمال التي يتم نشرها. في الواقع، فإنك بمجرد أن تصبح قادرًا على ذلك (التنزيل والمساهمة)، ستكون قد حققت الغاية التي تهدف إليها هذه الأداة، حيث أن الغاية الأساسية لها كما ذكرنا في المقال السابق هو نشر العلم ومشاركته مع الآخرين، من خلال زيادة المحتوى مفتوح المصدر عبر الإنترنت وجعله متاحًا للجميع، أي القدرة على مشاركة الشيفرات البرمجية والوصول إليها والتعديل عليها من قبل الآخرين كما يحلو لهم. القراءة والكتابة عمومًا، هناك طريقتين للتفاعل مع مستودع جيت، هما القراءة منه أو الكتابة عليه. يمكن تشبيه المستودع بالملف، حيث أنك في بعض الأحيان تفتحه بغاية القراءة منه أو لإجراء بعض التعديلات عليه. سنتحدث في مقالتنا هذه عن القراءة من المستودع فقط، ونغطي الكتابة في مقال آخر. جيت أم جيت هاب؟ جيت ليس نفسه جيت هاب GitHub أو جيت لاب GitLab أو بت باكت Bitbucket، جيت هو برنامج سطر أوامر command-line، وهو يبدو كالتالي: $ git usage: Git [--version] [--help] [-C <path>] [-p | --paginate | --no-pager] [--bare] [--Git-dir=<path>] <command> [<args>] كون جيت أداة مفتوحة المصدر، سمح هذا للعديد من المبرمجين والمطورين والمهتمين بتطويره وإضافة العديد من الخصائص والإضافات إليه، والعديد من هذه الإضافات أصبحت اليوم ذات شعبية كبيرة. ستتعلم في هذه السلسلة من المقالات كيفية استخدام جيت من خلاله سطر الأوامر فقط، أي من دون الاعتماد على أي نوع من الواجهات (حقيقةً يمكنك تجاهل كيفية استخدام الواجهات، ويمكنك الاعتماد على سطر الأوامر فقط). عمومًا، نستعرض في المقالات القادمة بعضًا من خدمات جيت المشهورة التي تستخدم لإنجاز المشاريع. تثبيت جيت جيت يأتي مثبت مع جميع توزيعات لينوكس الأساسية، حيث يمكنك أن تجده ضمن مستودع البرامج software repository (بالنسبة لمستخدمي توزيعة BSD، فهو موجود ضمن شجرة المنافذ Ports tree ضمن قسم devel). عمومًا، يمكنك تثبيته باستخدام مدير حزم لينكس توزيعات ديبيان من خلال الأمر التالي: $ sudo apt install git بالنسبة لأنظمة التشغيل غير مفتوحة المصدر مثل نظام ويندوز، انتقل إلى هذا الرابط تعليمات التثبيت. طبعًا أوامر جيت هي نفسها، أي بغض النظر عن نوع نظام التشغيل الذي تستخدمه، لكن بالنسبة لمستخدمي نظام ويندوز ينبغي عليهم تكييف أوامر جيت لتلائم ملفات ويندوز، أو تثبيت Cygwin لتشغيل جيت محليًا، وذلك تجنبًا لحدوث تعارضات مع نظام ملفات ويندوز. الوصول إلى جيت غالبيتنا لا يحتاج إلى استخدام جيت يوميًا، فمعظم استخدامنا لجيت يتمثّل في الذهاب أحيانًا إلى أحد المستودعات وتنزيل ملف أو عدة ملفات ثم المغادرة وقد لانحتاج لفتح جيت مرة أخرى لفترة من الزمن. هناك طريقتان للوصول إلى جيت، الأولى من خلال سطرالأوامر، والثانية من خلال إحدى الخدمات المنتشرة على الإنترنت، والتي توفر لنا وصولًا سريعًا وسهلًا من خلال متصفح الويب (جيت هاب مثلًا). لنفترض أنك تريد تثبيت سلة المهملات Trash-Bin لاستخدامها في الطرفية Terminal، وذلك لأنك لسوء الحظ تتعرض كثيرًا لحالات مثل حذف ملفات عن طريق الخطأ أو مثلًا كنت تريد حذف بعض الملفات فقط من مجلد ولكنك حذفت الملفات عن طريق الخطأ من المجلدات الفرعية أيضًا، وذلك من خلال الأمر rm. ربما سمعت عن الأداة Trashy، لذا في حال أردت تثبيتها أنصحك بإلقاء نظرة على التوثيق الرسمي لها قبل ذلك. تنويه: لحسن الحظ يتم استضافة Trashy على غيت لاب بشكل افتراضي، ويمكنك الاطلاع عليها من هنا. تحميل مستودع جيت بالكامل و تخزينه على جهازك الطريقة الأولى التي سنتعامل بها مع جيت هي أشبه بما يسمى landgrab، وتعني الحصول أو الاستيلاء السريع على شيء ما، حيث أننا سننسخ كل شيء، ولاحقًا نفرز بناءً على محتويات هذه الأشياء. بما أن المستودع يتم استضافته على مخدم جيت، فهناك طريقتان لإتمام العملية السابقة، الأولى من خلال سطر الأوامر، والثانية من خلال واجهة الويب. لجلب كامل المستودع من خلال جيت، نستخدم الأمر git clone إضافةً إلى تحديد عنوان URL لمستودع جيت المطلوب الحصول عليه، وفي حال لم تكن متأكدًا من عنوان المستودع، فيمكنك التأكد من العنوان من الصفحة الرئيسية للمستودع، حيث يكون معروضًا هناك. على سبيل المثال، عنوان URL لمستودع Trashy من جيت لاب يكون معروضًا كما يلي: هذا العنوان يكون موجود في الصفحة الرئيسية في المستودع، كل ما عليك فعله هو نسخه ولصقه. قد تلاحظ أنه في بعض الخدمات يتم توفير روابط SSH و HTTPS، لذا تجدر الملاحظة إلى أنه لا يمكنك استخدام روابط SSH إلا إذا كان لديك وصول SSH إلى المضيف (تمكّن العديد من خدمات الاستضافة لجيت استخدام هذه الروابط من خلال السماح لك بتحميل مفتاح SSH العام الخاص بك)، وإلا يجب عليك استخدام عنوان URL الخاص ببروتوكول HTTPS فقط. بعد الحصول على عنوان URL، يصبح موضوع استنساخ المستودع بسيطًا، فكل ما عليك فعله هو استخدام الأمر git clone متبوعًا بالعنوان، كما يمكنك أيضًا (إذا أحببت) تحديد مجلد لوضعه فيه. افتراضيًا، يتم نسخ مجلد جيت إلى مجلدك الحالي؛ على سبيل المثال، يتم وضع 'trashy.git' في مجلدك الحالي باسم 'trashy'. بالنسبة لي، أنا استخدم الامتداد .clone كاختصار للمستودعات التي يمكن قراءتها فقط، و .git للمستودعات التي يمكن قراءتها والكتابة عليها، ولكن هذا يعود لك، فهو لا يمثل قاعدة رسمية. $ git clone https://gitlab.com/trashy/trashy.git trashy.clone Cloning into 'trashy.clone'... remote: Counting objects: 142, done. remote: Compressing objects: 100% (91/91), done. remote: Total 142 (delta 70), reused 103 (delta 47) Receiving objects: 100% (142/142), 25.99 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done. Checking connectivity... done. بمجرد نسخ المستودع بنجاح، يمكنك تصفح الملفات الموجودة فيه تمامًا كما لو أنك تتصفح أي مجلد آخر على جهاز الحاسوب الخاص بك. الطريقة الثانية لجلب نسخة من المستودع هي من خلال واجهة الويب، حيث يوفر كل من جيت هاب وجيت لاب لقطات لأي مستودع على هيئة ملفات بامتداد ‎.zip“‎” أي ملفات مضغوطة. بالنسبة لجيت هاب فيمكنك تحميل المستودع من خلال الضغط على الزر الأخضر الكبير الذي يكون موجودًا في صفحة المستودع، أما بالنسبة لجيت لاب، فيكون على شكل زر رمادي غير واضح كثيرًا وعلى يمين نافذة المتصفح. الحصول على ملف محدد من مستودع جيت هناك طريقة أخرى للحصول على ملف من مستودع جيت، تتجلى هذه الطريقة بالذهاب إلى المستودع وجلبه مباشرةً، لكن هذه الطريقة لا يمكن القيام بها إلى من خلال واجهات الويب، حيث يمكنك النظر إلى نسخة ملفات المستودع الخاصة بشخص آخر. تكمن مشكلة استخدام هذه الطريقة في أنك قد تجد أن بعض الملفات غير موجودة ضمن مستودع جيت في الحالة الخام Raw (أي بدون تنزيله وبنائه)، حيث قد يكون الملف موجودًا بشكل كامل فقط بعد تنفيذ أمر make لبناء الملف، وهو الأمر الذي لن يحدث حتى تقوم قم بتنزيل المستودع، وقراءة ملف README أو INSTALL، ثم تنفيذ أوامر التثبيت والبناء. عمومًا، إذا كنت متأكدًا من وجود الملف يمكنك القيام بهذه العملية دون الحاجة لتنزيل المستودع. في GitLab و GitHub، انقر فوق روابط الملفات Files لعرض الملف، واعرض الملف في الحالة الخام Raw، ثم احفظه من خلال متصفح الويب الذي تستخدمه، على سبيل المثال في Firefox نختار File ثم Save Page As. في مستودع GitWeb، يكون هناك رابط للعرض بالحالة الخام Raw ضمن قائمة الملفات. أفضل الممارسات يمثل نسخ مستودع جيت بأكمله الطريقة الصحيحة للتفاعل مع جيت، وذلك لعدة أسباب، أولها سهولة تحديث النُسخ (الإصدارات) باستخدام الأمر git pull، حيث أنك لن تضطر في هذه الحالة إلى العودة إلى موقع الويب في كل مرة تحتاج فيها إلى الحصول على نسخة جديدة من الملف عندما يتم إجراء تحسين عليها. السبب الثاني يتجلى في حالة إجراء تحسينات أو تعديلات بنفسك، حيث سيكون من الأسهل إرسال هذه التعديلات إلى مؤلفها الأصلي في حال كان كل شيء جيد ومرتب في مستودع جيت. بدايةً، سيكون من الجيد لك التدرب على نسخ مستودعات جيت من الإنترنت إلى حاسوبك كما تعلمنا، وفي حال لم تكن تعرف كيفية استخدام الطرفية Terminal جيدًا، فتابع الفقرة التالية. أساسيات الطرفية بدايًة، يجب أن تضع في ذهنك أن جميع الملفات على جهاز الحاسوب لها مسار “path.“ لنفرض الآن أنك تريد فتح ملف بالطريقة الاعتيادية، وليكن اسم الملف monkey، في هذه الحالة يتوجب عليك الذهاب إلى موقع الملف، وهذا يتضمن التنقل بين عدة مجلدات وصولًا إلى موقع الملف، على سبيل المثال الذهاب إلى المجلد HOME ثم Pictures وأخيرًا المجلد InktoberSketches الذي يتضمن الملف monkey المطلوب، وبالتالي يكون مسار الملف المطلوب هو: $HOME/Pictures/InktoberSketches/monkey.kra عموماً، تبدأ جميع مسارات الملفات بالمجلد ‎$HOME“‎” (أو إذا أردت يمكنك استبدالها بالمؤثر ~) متبوعة بقائمة من المجلدات وتنتهي باسم الملف المطلوب. إذا كنت ترغب في نسخ مستودع جيت إلى مجلد المستندات Documents الخاص بك، فيمكنك فتح الطرفية وتنفيذ هذا الأمر: $ git clone https://gitlab.com/foo/bar.git $HOME/Documents/bar.clone بعد تنفيذ هذا الأمر، يمكنك الذهاب إلى مجلد المستندات، وستجد مجلد “bar.clone“ فيها. يمكنك بعد ذلك زيارة هذا المستودع في وقت لاحق، واستخدام الأمر git pull لمعرفة ما إذا كانت هناك تحديثات للمشروع: $ cd $HOME/Documents/bar.clone $ pwd bar.clone $ git pull حاليًّا، هذه هي أوامر الطرفية التي تحتاج معرفتها للبدء، لذا يمكنك الذهاب والمحاولة بنفسك حتى تعتاد عليها. ترجمة -وبتصرف- للمقال Getting started with Git لصاحبه Seth Kenlon. اقرأ أيضًا المقال التالي: إنشاء أول مستودع لك من خلال جيت Git الدليل المرجعي للعمل على نظام غيت Git مبادئ Git الأساسية إعداد Git للمرة الأولى مدخل إلى نظام التحكم في النسخ Git
  5. هدى جبور

    ما هو Git؟

    ستتعلم في هذه السلسلة كيفية استخدام نظام إدارة الإصدارات جيت Git، وفي هذه المقدمة للسلسلة ستتعرف على الهدف من استخدام الأداة جيت ومن يجب أن يستخدمها. هذا المقال جزء من سلسلة مقالات حول جيت Git، وإليك روابط جميع المقالات ضمن هذه السلسلة: ماهو جيت git؟ بدء العمل مع نظام إدارة الإصدارات جيت إنشاء أول مستودع لك من خلال جيت كيفية استعادة إصدارات الملفات القديمة في جيت ثلاث أدوات رسومية للأداة جيت كيفية بناء خادم جيت كيفية إدارة الكائنات الثنائية Bainary Blobs باستخدام جيت ربما سمعت كثيرًا عن الأداة جيت، وربما دفعك الفضول إلى طرح العديد من التساؤلات مثل هل يمكن استخدام جيت فقط لمشاركة شيفراتك البرمجية مع الآخرين، أم أنه بإمكانك استخدام جيت على المستوى الشخصي من دون مشاركته مع الآخرين، وهل يجب أن يكون لديك حساب على GitHub لاستخدام جيت؟ ولماذا استخدام جيت أساسًا؟ وما هي فوائد جيت؟ وهل جيت هو الخيار الوحيد؟ لذا انسَ ما تعرفه أو ما تعتقد أنك تعرفه عن جيت، ودعنا نتعرف عليه من البداية. ما هو نظام إدارة الإصدار؟ بدايةً يجب أن نعلم أن جيت هو نظام إدارة الإصدار (وتسمى أيضًا "إدارة النُسخ") version control system واختصارًا VCS. هناك العديد من أنظمة التحكم في الإصدار: مثل CVS و SVN و Mercurial و Fossil وبالطبع جيت. يُمثل جيت اللبنة الأساسية للعديد من الخدمات، مثل جيت هاب GitHub وجيت لاب GitLab، ولكن يمكنك استخدام جيت لوحدها، أي بعيداً عن أي خدمة. إن سبق وتعاونت مع شخص أو ربما عدة أشخاص على تنفيذ مشروع رقمي مثل تصميم وتطوير المواقع الإلكترونية أو تصميم وتطوير تطبيقات الجوال أو الأجهزة المحمولة أو كتابة المحتوى الرقمي أو التسويق بالمحتوى أو التجارة الإلكترونية أو غيرها من المشاريع، فبالتأكيد تعرف جيداً كيف تسير أمور التنسيق بين الشركاء على إدارة تنفيذ هذه المشاريع، حيث يكون لديك نسختك الخاصة من المشروع، ثم ترسلها إلى شريكك، الذي يجري بدوره بعض التعديلات، وبالتالي يصبح هناك نسختان (النسخة التي لديك والنسخة المُعدلة مع شريكك)، ثم يقوم شريكك بإرسال تعديلاته إليك لكي تطلع عليها وتقوم بدمجها في نسختك من أجل الحصول على نسخة جديدة واحدة مرةً أخرى، ويصبح الأمر معقداً أكثر في حال احتجت إلى إجراء المزيد من التعديلات على نسختك، وبالتالي يصبح بين يديك ثلاثة نُسخ؛ النسخة المدمجة التي عملتم عليها كلاكما، والنسخة التي غيرتها، والنسخة التي غيّرها شريكك. يشير جيسون فان جومستر Jason van Gumster في مقالته التحكم في الإصدار ليس للمبرمجين فقط إلى أن الفنانين يحتاجون أيضًا إلى التحكم في الإصدار، حيث تظهر هذه الحاجة في أعمالنا الفردية أيضًا. عند التعامل مع المشاريع العلمية أو حتى الفنية عادةً ما يتم تطوير نسخة تجريبية من شيء ما؛ نسخة أولى وثانية وثالثة و بمسميات مختلفة مثل project_justTesting.kdenlive و project_betterVersion.kdenlive، و project_best_FINAL.kdenlive وهكذا حتى نصل إلى النُسخة النهائية الأفضل. سواءً أكان تعديلًا برمجيًا صغيرًا في حلقة for أو أي تغييرٍ آخر، فإن نظام التحكم بالإصدارات يأتي لتسهيل الأمور وتقديم الأفضل لنا. لقطات Git يأخذ Git لقطات snapshots (تمثيل للحالة الحالية لملفاتك) من المشروع ويخزنها كنسخ فريدة، إذا قررت لسبب ما أن تتراجع عن بعض التعديلات، فيمكنك ببساطة العودة إلى إحدى النسخ السابقة تبعًا لما يناسبك. في حال كنت تتعاون مع شريكك لتنفيذ مشروع ما، فقد يقوم شريكك بإرسال بعض التعديلات لك، هذه التعديلات بإمكانك دمجها ضمن فرع العمل الخاص بك، وبعد ذلك يمكن لشريكك أن يحصل على النسخة المدمجة من المشروع ومتابعة العمل على النُسخة الجديد. عمومًا فإن جيت ليس أداةً سحرية، فقد تحدث أحيانًا بعض التعارضات (على سبيل المثال أنت عدلت السطر الأخير من الكتاب، لكن شريكك حذف هذا السطر بالكامل، فكيف يمكننا التعامل مع هذه الحالات؟)، ولكن على الرغم من ذلك، فإن جيت يسمح لك بإدارة أنواع عديدة من التعديلات المحتملة على نفس مشروع، وكذلك الاحتفاظ بتاريخ جميع التعديلات التي تم إجراؤها، وحتى أنه يسمح بالنُسخ المتوازية. أوامر غيت جيت هي الأداة السائدة للتحكم في الإصدار هذه الأيام. إليك كيفية استخدام هذه الأداة بشكل فعال. الأساسيات - عند العمل مع جيت بمفردك أو مع الآخرين إليك أهم الأوامر الأساسية من أوامر غيت يليها شرحها: git status يستخدم هذا الأمر للتحقق من حالة ملفات المستودع، حيث أنه يذكرنا بالحالة التي توقفنا عندها، ويعرض لنا ملخصًا للتغييرات المحلية والملفات التي لم يتم تتبعها والإيداعات البعيدة. git diff يستخدم هذا الأمر لعرض التغييرات المحلية المحددة للملفات المتتبعة، ويمكنك القول بأنك تحتاج هذه الأمر للإجابة على سؤالين مُحددين: ما الذي قُمت بالتعديل عليه ولم تقم بإدراجه بعد، وما الذي قمت بإدراجه لكن لم تقم بإيداعه بعد. بالرغم من أنه بإمكان git status الإجابة على هذين السؤالين، إلا أن الأمر git diff كفيل بالإجابة عنها بشكل أدق، حيث سيخبرك عن أي سطر تمت إضافته وعن أي سطر تمت إزالته. يمكنك أن تستخدم مع هذا الأمر الراية ‎--name-only لرؤية أسماء الملفات التي تم تغييرها. git add يستخدم لإدراج تعديلات على الملفات المتتبعة وغير المتتبعة. git commit يستخدم لإنشاء إيداع جديد يتضمن التغييرات التي أضفتها، وتشبه نقطة الحفظ في الألعاب Save Point حيث يمكن من خلالها العودة إلى نسخة معينة تم الحفظ عندها. في حال أردت إرفاق عملية الإيداع برسالة توضيحية (تسمى رسالة الإيداع) استخدم ‎-m وأضف رسالة ذات معنى معبر. git push لإرسال التغييرات إلى المستودع البعيد الذي تم إنشاؤه (من الشائع استخدامه أكثر مع GitLab أو GitHub). رايات flags مهمة - للحفاظ على كل شيء منظما git reset HEAD -- يؤدي إلى إزالة كل التغييرات التي لم يتم إيداعها والعودة إلى آخر إيداع، وهذا ما يشير إليه HEAD، وبتعبير أدق فإن HEAD هو مؤشر يشير دائمًا إلى الإيداع الحالي، وقد ينتمي أو لا ينتمي أحيانًا إلى الفرع الحالي. git add -u يستخدم لإدراج الملفات المحدثة فقط، والتي تم إيداعها مسبقًا. git log --graph --pretty=oneline --abbrev-commit لتأريخ الفرع بشكل أرتب وأجمل أنشئ قشرة shell أو استخدم الاختصارات Aliases (الأمر git alias) لتسهيل الوصول، على سبيل المثال git lg. العمل مع مستودع بعيد إليك أهم الأوامر يليها شرحها: git fetch --all يستخدم هذا الأمر لتنزيل جميع الإيداعات والملفات والمراجع إلى الفروع الموجودة في جميع المستودعات البعيدة حتى تتمكن من دفع أو سحب ما تريد العمل عليه. git pull --rebase <remote><branch> يستخدم لدمج جميع الإيداعات بدءًا من آخر إيداع مشترك لك من الفرع البعيد دون إنشاء إيداع دمج. git stash يستخدم لحفظ التغييرات التي لم يتم إيداعها محليًا (المرحليّة وغير المرحليّة) مما يسمح لك بإجراء التغييرات وتبديل الفروع وتنفيذ أوامر جيت الأخرى. git stash pop لإعادتها، حيث أن pop يزيل التغييرات من stash ويعيد تطبيقها على نسخة العمل. gi t add [-A or . or -- <filename>] لتحديد الملفات التي تضيفها إلى إيداعاتك، خصوصًا إذا كنت ترغب في فتح طلب لدمجها في مشروع أولي. git commit -m "commit message" تم شرحه مسبقًا. git push origin <branch> دفع الفرع الحالي إلى المستودع البعيد الذي يحمل العنوان "origin" والفرع المسمى branch. git checkout -b <new_branch> اختصار: git branch والأمر: git checkout وهو أمر مفيد عندما تريد تجربة فكرة ويكون لديك فرع جديد لتجربتها فيه ويمكن دمجها أو حذفها لاحقًا. git checkout master && git pull --rebase يستخدمان في حال أردنا الوصول إلى أحدث إيداع في مشروع لا تتابعه إلا نادرًا. git reset --hard origin/master يستخدم عند الحاجة إلى الوصول إلى حالة معروفة. تنبيه: يؤدي هذا إلى مسح جميع التغييرات، حتى الإيداعات، بدءًا من الإيداع الأخير و وصولًا إلى المستودع البعيد origin في الفرع master. git push origin master عندما تُجري بعض العمليات الصحيحة، يمكنك استخدامه لإرسال تغييراتك إلى المستودع البعيد المسمى origin في الفرع master. تعليمات الحصول على المساعدة git <cmd> -h لمراجعة مختصرة للرايات الخاصة بالأمر المحدد. git <cmd> --help لمشاهدة جميع الخيارات المتاحة للأمر المحدد. الفروع الأساسية تمثل الفروع سلسلة من الارتباطات وإليك أهم الأوامر للتعامل معها يليها شرحها: git branch --all قائمة بجميع الفروع المحلية والبعيدة. git checkout <branch> التبديل إلى فرع موجود. git checkout -b <branch> master إنشاء فرع قائم على الفرع master ثم الانتقال إليه. git checkout master && git merge <branch> دمج التغييرات في الفرع master. سلسلة أوامر: سلسلة أوامر نستخدمها بشكل يومي مع غيت استخدم الأمر cd للانتقال إلى مشروعك المحلي الذي تريد بدء إصداره باستخدام (المجلد الذي يحتوي ملفات المشروع على جهازك). بعد ذلك كل ما عليك فعله هو تنفيذ الأمرgit init لأول مرة لإعداد المجلد وتتبع الإصدار: git init git status git add --all git status git commit -m "meaningful initial commit message" git show بعد ذلك تبدأ بتعديلاتك على ملفاتك المحلية، ثم تقوم بإيداعها على فترات منتظمة: git diff git commit -a -m "Another commit message. -a performs the add step for you" git status git log --graph --pretty=oneline --abbrev-commit بعد فترة، قد يصبح لديك 3 إيداعات، وبالتالي سيكون من الأفضل اعتبارها إيداعًا واحدًا: git log --graph --pretty=oneline --abbrev-commit git reset --soft HEAD~3 git diff --cached git commit -a -m "Better commit message for last 3 commits" وأخيرًا ، ربما تحتاج لحذف بعض الملفات غير الضرورية في المجلد الحالي: git status git diff --cached git add -u git commit -m "Another commit message. -u adds updates, including deleted files" git status git log --graph --pretty=oneline --abbrev-commit git push origin master التطوير الموزع باستخدام جيت يُعتبر العمل على نفس المشروع من خلال أجهزة منفصلة أمرًا معقدًا، لأنك بحاجة إلى الحصول على آخر نسخة من المشروع عندما تريد متابعة العمل وإجراء التعديلات التي تريدها، ثم مشاركة هذه التعديلات مع شُركائك في المشروع. الأسلوب التقليدي للقيام بهذا الأمر هو استخدام خدمات مشاركة الملفات عن طريق الانترنت، أو مرفقات البريد الإلكتروني، وكلاهما طرق غير فعّالة وتعرضك للعديد من الأخطاء. الهدف الرئيسي من تصميم جيت هو تحقيق مفهوم التطوير الموزع distributed development؛ فإذا كنت شريكًا في مشروع ما، يمكنك استنساخ المستودع الخاص بالمشروع repository، ثم العمل عليه كما لو أنه النسخة الوحيدة الموجودة، ثم من خلال استخدام بعض الأوامر البسيطة يمكنك التراجع عن أيّة تغييرات قام بها أحد الشركاء الآخرين، كما وبإمكانك أيضاً نقل تعديلاتك إلى الآخرين. إذًا لن يكون هناك أي التباس حول من لديه نسخة معينة من المشروع، أو النسخة الأساسية، أو التي توجد تعديلات فيها، فكل نسخة يتم تطويرها محلياً بشكل كامل، ثم يتم دفعها Push أو سحبها pull بما يتناسب مع هدف المشروع. واجهات جيت بصورة عامة، فإن جيت عبارة عن تطبيق يعمل على نظام التشغيل لينكس Linux، وبما أنه مفتوح المصدر ومصمم تصميمًا جيدًا، قام المطورون حول العالم بتصميم طرق أخرى للوصول إليه. يُعتبر جيت أداة مجانية تمامًا وبإمكان الجميع استخدامه، ويأتي على شكل حزم كل منها مخصص للعمل على نظام تشغيل مختلف ("مثل" Linux و BSD و Illumos وأنظمة تشغيل أخرى شبيهة بيونكسـ Unix)، ويمكنك معرفة إصدار حزمة جيت المثبتة لديك بالشكل التالي: $ git --version git version 2.5.3 إن واجهات جيت الأكثر شهرة معظمها قائم على الويب: مواقع مثل bitbucket و gitlab و github و sourceforge و Savannah جميعها توفر إمكانية استضافة الشيفرة على الإنترنت والهدف الرئيسي لهذه المواقع هو تعظيم المحتوى مفتوح المصدر للعامة، إضافةً إلى أنها توفر (وبدرجات مختلفة) واجهات المستخدم الرسومية المبنية على المتصفحات لتسهيل استخدام جيت. واجهة GitLab تظهر بالشكل التالي: إضافة إلى ذلك من الممكن أن يكون لخدمة جيت أو للمطورين المستقلين؛ واجهة مخصصة لا تعتمد على الويب، وبالتالي هي مفيدة في حال لم تكن ترغب بالعمل من خلال المتصفحات. أوضح مثال على ذلك هو مدير الملفات، على سبيل المثال يمكن لمدير ملفات KDE مثل Dolphin التحقق من حالة ملفات المستودع git status وتوليد أوامر الإيداع commit والسحب والدفع. تطبيق Sparkleshare يستخدم جيت كأساس لواجهة مشاركة الملفات الخاصة كما هو الحال مع تطبيق Dropbox. للمزيد من المعلومات راجع الصفحة الرسمية التالية Git wiki التي تعرض قائمة كاملة بمشاريع واجهة جيت الرسومية. من يجب أن يستخدم جيت؟ السؤال الأفضل والأكثر دقة يجب أن يكون متى؟ ولماذا؟ متى يجب أن أستخدم جيت، وما الذي يجب أن أستخدمه من أجله؟ لتحقيق أفضل استفادة من جيت، عليك أن تفكر قليلًا خارج الصندوق فيما يتعلق بتنسيقات الملفات. أُنشِئ جيت في الأساس لإدارة الشيفرة المصدر التي تمثل عدة سطور نصية على شكل تعليمات برمجية، وهو لا يهتم و لا يعرف ماهية هذه الأسطر، فكل ما يهمه أنها نص (أسطر برمجية أو رواية أو مقالة..إلخ)، لذا فإن جيت يعد خيارًا رائعًا لإدارة الإصدارات وتتبعها مهما كان نوعها طالما أنها نصية. لكن ما هو النص؟ عندما تقوم بكتابة شيءٍ ما من خلال استخدام أحد التطبيقات المكتبية مثل Libre Office، فغالبًا قد لا تضع النص كما هو، أي ربما قد يكون النص الذي تكتبه موضوعاً ضمن ملفات XML، وربما أيضًا قمت بضغط ملفات XML مع بعضها البعض ضمن مجلد واحد من خلال أحد برامج الضغط مثل ZIP، وذلك لجمعها مع بعضها لتسهيل الرجوع إليها أو لضمان أن جميع الأشياء المهمة التي تريدها موجودة في ملف واحد عندما تريد إرسالها لشخص ما. إن أنواع الملفات التي نحفظ بها مشاريعنا والتي نعتقد أنها أنواع معقدة لحفظ البيانات مثل Kdenlive، أو SVG من inkscape هي في الواقع مكونة من ملفات XML، وتستطيع جيت إدارتها بسهولة. إذا كنت تستخدم "يونكس" Unix، فيمكنك معرفة مما يتكون منه الملف باستخدام الأمر file كما يلي: $ file ~/path/to/my-file.blah my-file.blah: ASCII text $ file ~/path/to/different-file.kra: Zip data (MIME type "application/x-krita") وإذا أردت التأكد من ذلك، يمكنك عرض محتويات الملف باستخدام الأمر head كما يلي: $ head ~/path/to/my-file.blah إذا رأيت ملفًا يحتوي نصًا يمكن قراءته ببساطة فهو غالبًا ملف نصي عادي، أما في حال رأيت أنه يحتوي على رموز كثيرة غير مفهومة وبعض المحارف النصية هنا وهناك فهو غالبًا ليس ملف نصي عادي وإنما نوع آخر من الملفات. لكيلا تكون عرضةً للخطأ، جيت يمكنه إدارة تنسيقات الملفات الأخرى، لكنه يعاملهم وكأنهم "كائنات ببيانات ثنائية" blobs. الاختلاف أنه في حالة الملفات النصية يمكن أن تكون لقطتين snapshots (أو "إيداعين" commits كما نسميها) مختلفتين بسطر أو ثلاث أسطر، أما إذا كان لديك ملف يمثل صورة وتم تعديلها ضمن لقطتين مختلفتين، فلن يتمكن Git أن يعبر عن هذا التغيير، وذلك لأن الصور مختلفة عن النص، فتعديل الصور ليس أمراً سهلاً كما في النص، على سبيل المثال في النص التالي: "<sky>ugly greenish-blue</sky>" فإن تعديله إلى: "<sky>blue-with-fluffy-clouds</sky>" يمثل أمرًا بسيطًا، لكن إجراء التعديلات على الصور هو أمر أكثر تعقيدًا من مجرد إضافة وحذف كما في حالة مع النص. غالباً ما نقوم برفع الكائنات التي تمثل بيانات ثنائية مثل أيقونات PNG وجداول البيانات والمخططات الانسيابية إلى Git، لذا يمكنك أنت أيضًا رفع هكذا تنسيقات في حال كنت تعمل على جيت إلا في حال كانت هذه الملفات ضخمة، فلن تتمكن من رفعها. في حال كنت تعمل على مشروع يتضمن ملفات نصية وكائنات تمثل بيانات ثنائية حجمها كبير (كما في حالة ألعاب الفيديو التي تحتوي شيفرات مصدرية متساوية لكل من البيانات الرسومية والصوتية)، فهنا بإمكانك القيام بأحد الأمرين التاليين: إما ابتكار حل خاص بك، على سبيل المثال استخدام المؤشرات على محرك أقراص شبكة مشترك، أو استخدام أدوات إضافية مثل أداة جوي هيس الممتازة git annex، أو مشروع Git-Media. كما تلاحظ فإن جيت هي أداة يمكن للجميع استخدامها، وهي طريقة رائعة لإدارة إصدارات ملفاتك، وهي أداة قوية وليست مخيفة كما تبدو للوهلة الأولى. ترجمة -وبتصرف- للمقال ?What is Git لصاحبه Seth Kenlon. اقرأ أيضًا مبادئ Git الأساسية إعداد Git للمرة الأولى مدخل إلى نظام التحكم في النسخ Git
  6. مرحبًا ما المقصود من الكلمة yield في بايثون؟ رايتها هنا في هذا المقطع من الكود: def validate(sent, stats): for s in sent: aspects = s.find('aspectTerms') or [] for aspect in list(aspects): polarity = aspect.attrib['pol'] if polarity == 'conflict': aspects.remove(aspect) stats['conflicts'] += 1 if not aspects: stats['rejected'] += 1 continue yield s
  7. لماذا اضفنا from_seed(42) ؟ ولماذا نستخدمها ؟
  8. هل تطبيق المشروع باستخدام المكتبات الجتهزة مثل sklearn و orange بيفرق كثيرا عن تطبيقه بشكل يدوي في البايثون طبعا نفس الموديل و نفس الاعدادات بشكل كامل..
×
×
  • أضف...