منشور

أساسيات التعامل مع Git

شرح مبسط لاستخدام Git وأهم الأوامر التي تلزم للاستخدامات الأساسية.

ماهي جِت؟

تسمح جِت لمجموعة من الأشخاص بالعمل سويةً، وباستخدام نفس الملفات، والتعامل مع التداخل الحاصل عند تعديل عدة أشخاص للملفات ذاتها.

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

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

تنصيب Git

لتنصيب git على أنظمة لينكس ، ويندوز ، ماك .. راجع الشرح هنا.

إنشاء حزمة جديدة

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

إنشاء حزمة يعني في مثالنا أنك أنت صاحب العمل والآن تقوم بوضع حجر الأساس!

قم بإنشاء مجلد جديد على جهازك واذهب لمسار المجلد في التيرمينال من خلال الأمر :

1
	cd folder/path

طبعا مع استبدال folder/path بمسار المجلد.

الآن ، ولإنشاء حزمة جديدة نفذ الأمر :

1
	git init

هل هذا صعب؟

الوصول لحزمة

هنا في حالة أنك لم تنشئ الحزمة، أي في مثالنا أنت الموظف وتريد أن تبدأ بتحميل الحزمة من الإنترنت لجهازك والبدأ بالتعديل والتطوير، إذاً لتحميل الحزمة:

1
	git clone /path/to/repository 

هذا هو الشكل العام للأمر، استبدل username باسمك على جِتهب والـ /path/to/repository بمسار الحزمة على جتهب، مثلاً لتحميل حزمة هذا الموقع (والذي هو موجود كحزمة على جتهب) سوف أكتب:

git clone https://github.com/mulham/mulham.github.io

طريقة العمل

(طريقة العمل هذه للفهم النظري، وليست مهمة للتطبيق العملي)

إن حزمتك المحلية مؤلفة من ثلاث “شجرات” مختزنة من قبل git. الأولى هي المجلد الذي نعمل ضمنه ، والذي يحوي على ملفات الحزمة. و الثانية هي ملف ال index والذي نتعامل معه كمسرح العمل. وأخيراً الرأس Head والذي يشير لآخر تعديل قمت به.

شرح مبدأ عمل جت

إضافة وتعديل

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

لإضافة التغييرات التي قمت بها إلى خشبة المسرح، استخدم الأمر:

1
	git add <filename>

مع استبدال <filename> باسم الملف أو المسار ثم اسم الملف، إذا أردت إضافة كل شيئ، ضع نجمة * بدل اسم الملف:

1
	git add * 

أو إذا أردت إضافة جميع الملفات ذات الصيغة المحددة، أي مثلاً التي تكون بلاحقة html، فاكتب:

1
	git add *.html

على العموم للسهولة يمكن دائماً استخدام الأمر الثاني أي إضافة كل شيئ.

الآن لتنفيذ هذه التعديلات (أو لنقل للسهولة لإعطاء رسالة لتوضيح سبب أو محتوى التعديل - الخطوة إجبارية) استخدم الأمر:

1
git commit -m "Commit message" 

مع استبدال commit message بين قوسين، أي مثلاً git commit -m "modify" هنا أعطيت رسالة بأنني قمت بتعديل ما.

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

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

إرسال التغييرات

لإرسال التغييرات التي أجريناها إلى الحزمة البعيدة على الإنترنت، نفذ الأمر :

1
git push -u origin master

حيث origin هو اسم مجلد الحزمة و master اسم الفرع (branch) الذي تريد إرسال التغييرات إليه.

الجزء -u من الأمر هو لحفظ الفرع الموجود على الجهاز المحلي (origin) والموجود على الإنترنت (master)، أي أنك ستكتب هذا الأمر مرة واحدة فقط، أما لاحقاً فستكتب لرفع تعديلاتك التالي فقط:

1
	git push

(سيطلب منك في كل عملية رفع اسم المستخدم وكلمة المرور الخاصين بك على موقع جِتهَب)

عرض الإختلاف

لقد قلت لك في السطر الأول من هذا الشرح أن جِت تسمح بـ “التعامل مع التداخل الحاصل عند تعديل عدة أشخاص للملفات ذاتها

إذا لقد قمت أنت بالتعديل على أحد الملفات، يجب أولاً (وإن كنت جزء من فريق يعمل على تطوير الحزمة ولست لوحدك) بالاتصال بالحزمة الأساسية الموجودة على الإنترنت ومعرفة إن كان أحدهم قام بالتعديل على نفس الملف وإن كان هناك تعارضات، كل هذا بالأمر:

1
	git pull

في حال وجود أي تعارضات فستُعرض لك حينها ملف بملف، سطر بسطر، ويمكنك عندها دمج أو حل هذه التعارضات، ثم تقوم بعدها برفع تغييراتك باستخدام git add و git commit.

  • ملاحظة هامة: إن الأمر git pull يقوم بتحميل التعديلات التي قام بها الآخرون على الحزمة ودمجها مباشرة بشكل تلقائي مع الحزمة الموجودة محليًا. إن كنت ترغب باستعراض التعديلات قبل الدمج فيمكنك استخدام الأمر git fetch والذي يقوم بتحميل التعديلات من الحزمة على الإنترنت دون دمجها مع الحزمة المحلية، ثم لاستعراض تلك التعديلات استخدم الأمر git checkout وأخيرا للدمج يمكنك استخدام الأمر git merge.

أوامر أخرى

معرفة الحالة

يمكنك دائماً معرفة حالة الحزمة، أي عرض التعديلات (إن وُجدت) التي قمت بها والغير موجودة على خشبة المسرح، أي التي لم تضيفها بعد لتُرفع للإنترنت

1
	git status

هذا الأمر فقط لعرض الحالة، فلا تتردد باستخدامه متى شئت.

الأفرع

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

أولاً يمكنك تفقد الأفرع الموجودة حالياً على جهازك

1
	git branch

وسيكون الناتج مثلاً:

1
	master*

أي أنه يوجد حالياً فرع واحد فقط يحوي الحزمة نفسها. وعلامة النجمة تعني بأنه الفرع الذي تعمل به حالياً، الآن لإنشاء فرع جديد:

1
	git branch perfectdict

وبالتالي تكون قد أنشأت نسخة لجميع الملفات الموجودة في الفرع الأصلي master. لتنتقل الآن لفرع الجديد الذي أنشأته

1
	git checkout perfectdict

يمكنك إعادة إظهار الأفرع الموجودة حالياً

1
2
3
	> git branch
	master
	perfectdict*

كما تلاحظ فقد عرض لنا فرعين، والنجمة موضوعة على الفرع الجديد أي أنك الآن ضمنه.

الآن يمكنك إجراء التغييرات التي تريد وكيفما تريد دون قلق فأنت الآن ضمن فرع مستقل ولن تُحدث الفوضى في الحزمة أو الفرع الأساسي.

بعد انتهاءك من العمل على الفرع الجديد، يمكنك الانتقال للفرع الأصلي ودمج التغييرات

1
2
3
4
	> git checkout master
	> git branch
	master*
	perfectdict

هنا انتقلنا للفرع الأساسي master وتأكدنا بوجود النجمة بجواره أي أننا فعلاً ضمنه الآن. لنقم بالدمج

1
	git merge perfectdict

وبهذا تم دمج الكود في الفرع الذي أنشأته perfectdict مع الكود الأصلي في الحزمة master. كل هذا مازال محلياً، لرفع التغييرات الآن إلى الإنترنت:

1
2
3
4
	> git pull
	> git add *
	> git commit -m "added new cool feature!"
	> git push

روابط خارجية

  • لقد قام الأخ وليد بعمل ورقة واحدة تتضمن أهم أوامر جِت للرجوع إليها عند الحاجة

  • كما قام موقع codeschool (التجاري) بعمل شرح مُبسط مجاني لتعلم أوامر جِت (بالإنجليزي).

اقرأ أيضاً

هذا المنشور تحت ترخيص CC BY 4.0 بواسطة المؤلف.