Git لمهندس الأتمتة

مقال مجاني 6 دقيقة

مقدمة

الدرس الذي فات وصّلك لكورس Git و GitHub (6 ساعات، مجاناً على قناتي). وهذا الدرس يقلك ما منه يهمك بالتحديد كمهندس أتمتة.

لأنه Git أداة عامة لكل المبرمجين — لكن استخدام المؤتمت إلها مختلف قليلاً. في أشياء ستعملها كل يوم، وأشياء لن تلمسها، وفي فخّ واحد خاص بمشاريع الأتمتة سنحكي عنه.


الأهداف التعليمية

بنهاية هذا الدرس، ستكون قادراً على:

  • تعرف أوامر Git اللي ستستخدمها فعلياً
  • تكتب .gitignore صحيح لمشروع أتمتة
  • تشتغل بفروع بطريقة تناسب الأتمتة
  • تتعامل مع تعارضات ملفات الـ Page Objects

1. الأوامر اليومية

git status                        # وين أنا؟ — قبل أي شيء
git add .                         # جهّز كل التغييرات
git add src/test/java/pages/      # أو مجلد محدّد
git commit -m "أضف اختبارات السلة"
git push
git pull
git log --oneline -10             # آخر عشر commits
git diff                          # ما غيّرت؟
نصيحة
git status قبل كل شي. أكثر خطأ يحدث هو git add . وانت مش داري إنه في ملفات لا تريد أن تضيفها — زي ملف إعدادات فيه كلمة سر، أو مجلد target/ كامل.

2. الفروع — بطريقة الأتمتة

git switch -c feature/cart-tests  # فرع جديد
git switch main                   # رجوع
git switch -                      # للفرع السابق

git branch                        # قائمة الفروع
git branch -d feature/cart-tests  # حذف بعد الدمج

كيف تنظّم فروعك كمؤتمت:

الفرع لـ
feature/cart-tests مجموعة اختبارات جديدة
fix/flaky-login-test إصلاح اختبار متذبذب
refactor/page-objects إعادة هيكلة بدون تغيير سلوك
chore/upgrade-selenium ترقية مكتبات
مهم
قاعدة: فرع لكل مجموعة اختبارات، مش فرع لكل اختبار. لأنه اختبار واحد commit صغير — لكن مجموعة اختبارات لميزة كاملة هي وحدة مراجعة منطقية. ولو عملت فرع لكل اختبار، سيكون عندك عشرين PR صغير لا أحد بيراجعهم بجدية.

3. .gitignore — أهم ملف بمشروع الأتمتة

هذا الجزء الذي كورس Git العام لا يغطيه، وهو الأهم إلك.

# ── Maven ─────────────────────────
target/

# ── IntelliJ ──────────────────────
.idea/
*.iml

# ── نتائج التشغيل والتقارير ─────────
allure-results/
allure-report/
test-output/
screenshots/
target/evidence/
*.log

# ── التنزيلات من الاختبارات ─────────
downloads/

# ── drivers محلية (لو مشروع قديم) ───
drivers/
chromedriver*
geckodriver*

# ── أسرار ──────────────────────────
.env
*.local.properties
secrets/

# ── نظام التشغيل ───────────────────
.DS_Store
Thumbs.db
تحذير
الأسطر الأخيرة هي الأهم بمراتب: الأسرار. ملف .env فيه كلمة سر الأدمن، أو local.properties فيه توكن API — لو انعمل له commit مرة واحدة، هو بتاريخ Git للأبد. حتى لو شلته بـ commit تالي، أي حد عنده وصول للمستودع يستطيع يقراه من التاريخ. افحص الآن: شغّل git status وشوف إذا في ملف أسرار بالقائمة. ولو لقيت — أضفه لـ .gitignore قبل أي commit.
مهم
وtarget/ أهم سطر تقني. بدونه ستعمل commit لمجلد فيه آلاف الملفات المترجمة ولقطات الشاشة، والمستودع يحدث مئات الميجابايت. وهذا أشهر خطأ بأول مشروع أتمتة.

4. التعارضات — الحالة الخاصة بالأتمتة

بمشروع أتمتة، التعارضات تصبح بمكانين تقريباً دايماً:

1. pom.xml — أنت أضفت مكتبة وزميلك أضاف مكتبة أخرى بنفس المكان

2. الـ Page Objects — أنت أضفت محدد وزميلك أضاف محدد بنفس الصفحة

git pull                          # ويحدث تعارض
# تفتح الملف، ترى:
<<<<<<< HEAD
    private static final By CART_TOTAL = By.cssSelector("[data-test='cart-total']");
=======
    private static final By CART_COUNT = By.cssSelector("[data-test='cart-count']");
>>>>>>> main

الحل هون سهل: خلّي الاثنين.

    private static final By CART_TOTAL = By.cssSelector("[data-test='cart-total']");
    private static final By CART_COUNT = By.cssSelector("[data-test='cart-count']");
git add .
git commit
نصيحة
معظم تعارضات مشاريع الأتمتة من هذا النوع: إضافتان مستقلتان بنفس المكان. والحل إنك تحتفظ بالاثنين. والتعارض الحقيقي الخطر هو عندما تكونوا الاثنين عدّلتوا نفس المحدد — وقتها لازم تسأل زميلك أي واحد الصح، لأنه واحد منكم عنده معلومة أحدث عن التطبيق.

تقليل التعارضات

نصيحة
git pull كل صبح قبل أن تبدأ. أبسط عادة وأكثرها فايدة — لأنه التعارض بين تغييرات يوم أسهل بمراتب من تعارض بين تغييرات أسبوع. وقسّم صفحاتك. لو CartPage فيها 300 سطر وكل الفريق بيعدّلها، سيكون في تعارض كل يوم. والحل مش Git — الحل إنك تفصل المكوّنات (كما أخذنا بدرس Components).

5. Pull Requests — لكود الاختبار كذلك

كود الاختبار كود. وبيتراجع بـ PR زي أي كود.

git switch -c feature/checkout-tests
# ... تكتب الاختبارات
git add .
git commit -m "أضف اختبارات إتمام الشراء"
git push -u origin feature/checkout-tests
# وبعدها تفتح PR على GitHub

ما المراجع بيدوّر عليه بمراجعة كود اختبار:

  • الاختبار Atomic؟ (لا يعتمد على غيره)
  • في Thread.sleep؟ ← رفض
  • المحددات متينة؟ (data-test مش nth-child)
  • في Assert بالـ Page Object؟ ← رفض
  • رسالة الـ Assertion واضحة؟
  • التنضيف موجود؟
مهم
القائمة هذه هي كل الكورس بست أسئلة. استخدمها بمراجعة كود غيرك — وبمراجعة كودك قبل لا تفتح PR.

6. أوامر النجاة

# تراجع عن تغيير ما عملت له commit
git restore src/test/java/pages/CartPage.java

# تراجع عن add
git restore --staged .

# عدّل آخر رسالة commit
git commit --amend -m "الرسالة الصح"

# اشطب آخر commit لكن خلّي التغييرات
git reset --soft HEAD~1

# احفظ شغلك مؤقتاً وانتقل لفرع آخر
git stash
git switch main
# ... وبعدها
git switch -
git stash pop
تحذير
git reset --hard تمسح شغلك بلا رجعة. لا تستخدمها إلا وانت متأكد 100%. وgit stash بديل آمن عندما تريد أن تبدّل فروع بسرعة.

7. ما لا تحتاجه (كمؤتمت)

هؤلاء موجودين بكورس Git، وممتازين تعرف إنهم موجودين — لكن لن تستخدمهم كثير:

  • rebase التفاعلي وإعادة كتابة التاريخ
  • cherry-pick
  • submodules
  • bisect
  • reflog
نصيحة
merge بتكفيك بـ 95% من الحالات. وrebase أنيق لكن أخطر — ولو الفريق لا يستخدمه، ما تبدأ فيه بنفسك.

قائمة الفحص

  • .gitignore فيه target/ و allure-results/ و .env
  • ولا ملف أسرار بالمستودع (git status نظيف)
  • بشتغل بفروع مش على main مباشرة
  • git pull كل صبح
  • رسائل commit واضحة
  • الاختبارات بتُراجع بـ PR

خلاصة الدرس

  1. git status قبل كل شي — يمنع git add . لملفات لا تريد إياها.

  2. فرع لكل مجموعة اختبارات، مش لكل اختبار — حتى تكون وحدة مراجعة منطقية.

  3. .gitignore أهم ملف بمشروع أتمتة.

  4. سرّ انعمل له commit مرة = موجود بتاريخ Git للأبد — حتى لو شلته بعد ذلك.

  5. target/ أهم سطر تقني — بدونه المستودع يحدث مئات الميجابايت.

  6. معظم تعارضات الأتمتة إضافتان مستقلتان — والحل احتفظ بالاثنين.

  7. والتعارض الخطر هو نفس المحدد — اسأل زميلك، واحد منكم عنده معلومة أحدث.

  8. git pull كل صبح — أبسط عادة وأكثرها فايدة.

  9. صفحة فيها 300 سطر تخلق تعارض يومي — والحل فصل المكوّنات مش Git.

  10. ست أسئلة مراجعة كود الاختبار هي كل الكورس مختصر — استخدمها على كودك قبل لا تفتح PR.


وبهيك خلصنا قسم Git و GitHub. روح خذ الكورس على القناة (6 ساعات بس!)، وشوفك بالقسم الحادي عشر — تصميم Framework.

من هون ورايح، منبني! 🏗️