Git و GitHub في التطوير المهني
مرحباً بك في الدرس الأخير! في هذا الختام الشامل، سنتناول سيناريوهات كاملة من العالم الحقيقي توضح كيفية استخدام Git و GitHub في تطوير البرمجيات المهني. سترى كيف يجتمع كل ما تعلمته في الممارسة العملية.
دليل سير عمل المشروع الكامل
لنتابع مشروعاً من البداية إلى النشر في الإنتاج:
المرحلة 1: تهيئة المشروع
# إنشاء مستودع جديد على GitHub
1. انقر فوق "New repository"
2. الاسم: company-dashboard
3. أضف README و .gitignore (Node) و MIT License
4. أنشئ المستودع
# الاستنساخ محلياً
git clone git@github.com:company/company-dashboard.git
cd company-dashboard
# إعداد هيكل المشروع
npm init -y
npm install express react typescript
# الالتزام الأولي
git add .
git commit -m "chore: initialize project with dependencies"
git push origin main
# إعداد حماية الفرع
- تمكين حماية الفرع على main
- طلب موافقة واحدة
- طلب فحوصات الحالة (الاختبارات، التدقيق)
- تمكين "Require branches to be up to date"
نقطة رئيسية: ابدأ دائماً بأساس قوي: هيكل مستودع مناسب، قواعد حماية، و CI/CD قبل كتابة الميزات.
بدء ميزة جديدة
مدير المنتج ينشئ قضية لميزة لوحة معلومات المستخدم الجديدة:
القضية #42: تنفيذ لوحة معلومات المستخدم
الوصف: يحتاج المستخدمون إلى لوحة معلومات لعرض نشاطهم
معايير القبول:
- عرض إحصائيات المستخدم
- إظهار تغذية النشاط الأخيرة
- تنفيذ تصميم متجاوب
- إضافة حالات التحميل
# تعيين نفسك وبدء العمل
1. تعيين القضية لنفسك
2. إضافة علامة: "feature", "frontend"
3. إضافة إلى لوحة المشروع: "In Progress"
# إنشاء فرع الميزة
git checkout main
git pull origin main
git checkout -b feature/USER-42-user-dashboard
# بدء التطوير
# إجراء تغييرات على src/components/Dashboard.tsx
git add src/components/Dashboard.tsx
git commit -m "feat(dashboard): add user statistics component
- Display total projects, tasks, and team members
- Implement card-based layout
- Add loading skeleton
Refs #42"
# متابعة التطوير مع التزامات متعددة
git commit -m "feat(dashboard): add activity feed component"
git commit -m "feat(dashboard): implement responsive grid layout"
git commit -m "test(dashboard): add component tests"
git commit -m "docs(dashboard): update README with dashboard usage"
نصيحة محترف: أشر إلى القضايا في الالتزامات باستخدام "Refs #42". استخدم "Closes #42" في PR النهائي لإغلاق القضية تلقائياً عند الدمج.
روتين التطوير اليومي
إليك كيف يبدو يوم التطوير النموذجي:
روتين الصباح (9:00 صباحاً):
# التحقق من الإشعارات
gh api notifications
# تحديث فرع main
git checkout main
git pull origin main
# العودة إلى فرع الميزة والمزامنة
git checkout feature/USER-42-user-dashboard
git merge main
# أو: git rebase main
# مراجعة طلبات مراجعة الكود
gh pr list --search "review-requested:@me"
gh pr view 45
gh pr review 45 --approve -b "LGTM! Great work on the error handling"
منتصف النهار (2:00 مساءً):
# متابعة التطوير
git add .
git commit -m "feat(dashboard): add data refresh functionality"
# الدفع لنسخ العمل احتياطياً
git push origin feature/USER-42-user-dashboard
نهاية اليوم (5:30 مساءً):
# الالتزام بأي عمل قيد التنفيذ
git add .
git commit -m "wip: working on chart integration"
# الدفع إلى البعيد
git push origin feature/USER-42-user-dashboard
# التحقق من مهام الغد
gh issue list --assignee @me
التعاون مع زملاء الفريق
سيناريوهات التعاون الحقيقية التي ستواجهها:
السيناريو 1: تعارض الدمج
# أنت والزميل كلاكما عدّل خدمة المستخدم
git pull origin main
# CONFLICT in src/services/userService.ts
# فتح الملف والحل
<<<<<<< HEAD
async function getUser(id: string) {
return api.get(`/users/${id}`);
=======
async function fetchUser(userId: string) {
return axios.get(`/api/users/${userId}`);
>>>>>>> feature/USER-42-user-dashboard
# النسخة المحلولة (ناقش مع الزميل أولاً!)
async function getUser(userId: string) {
return api.get(`/users/${userId}`);
}
# وضع علامة كمحلول
git add src/services/userService.ts
git commit -m "fix: resolve merge conflict in userService
Kept function name getUser but adopted userId parameter name
and api client from main branch"
السيناريو 2: ملاحظات مراجعة الكود
# تعليقات المراجع: "الرجاء استخراج الأرقام السحرية إلى ثوابت"
# إجراء التغييرات
git add .
git commit -m "refactor(dashboard): extract magic numbers to constants"
git push
# المراجع: "أضف معالجة الأخطاء لفشل API"
git add .
git commit -m "feat(dashboard): add error handling and retry logic"
git push
# قبل الدمج النهائي، نظف الالتزامات
git rebase -i main
# دمج الالتزامات "refactor" و "feat" في الالتزامات الرئيسية للميزة
git push --force-with-lease
مهم: تواصل دائماً قبل حل التعارضات. لا تفترض أن نسختك صحيحة. ناقش مع المطور الآخر.
إنشاء طلب سحب
ميزتك مكتملة وجاهزة للمراجعة:
# قبل إنشاء PR، جهز فرعك
git checkout feature/USER-42-user-dashboard
# 1. تأكد من أن الفرع محدث
git fetch origin main
git rebase origin/main
# 2. قم بتشغيل جميع الفحوصات محلياً
npm run lint
npm run test
npm run build
# 3. راجع تغييراتك الخاصة
git diff origin/main...HEAD
# 4. نظف تاريخ الالتزام
git rebase -i origin/main
# دمج التزامات الإصلاح، إعادة صياغة الرسائل غير الواضحة
# 5. دفع قسري للتاريخ النظيف
git push --force-with-lease
# 6. إنشاء طلب سحب
gh pr create --title "feat: implement user dashboard" \
--body "$(cat <<EOF
## Description
Implements the user dashboard feature requested in #42
## Changes
- Added Dashboard component with user statistics
- Implemented activity feed with real-time updates
- Added responsive grid layout for mobile
- Included loading states and error handling
- Added comprehensive test coverage (95%)
## Screenshots


## Testing
- [x] Tested on Chrome, Firefox, Safari
- [x] Tested responsive breakpoints
- [x] Tested with mock data
- [x] Tested error scenarios
## Checklist
- [x] Tests pass
- [x] Documentation updated
- [x] No console errors
- [x] Follows style guide
Closes #42
EOF
)"
تم إنشاء PR الخاص بك! الآن انتظر CI والمراجعات:
# مراقبة حالة PR
gh pr view 50
# يعمل CI تلقائياً
✓ Tests passed
✓ Linting passed
✓ Build succeeded
✓ Coverage threshold met (95% > 80%)
# يتم تعيين المراجعين تلقائياً عبر CODEOWNERS
# @frontend-team و @jane-doe مطلوبان
# معالجة تعليقات المراجعة
# جين تعلق: "ضع في اعتبارك إضافة هيكل التحميل"
git checkout feature/USER-42-user-dashboard
# إجراء التغييرات
git add .
git commit -m "feat(dashboard): add loading skeleton component"
git push
# بعد الموافقة
gh pr merge 50 --squash --delete-branch
إدارة الإصدار
إعداد ونشر إصدار جديد:
إنشاء إصدار:
# تحديث الإصدار في package.json
npm version minor # 1.2.0 → 1.3.0
# هذا ينشئ علامة git تلقائياً
# تحديث CHANGELOG.md
## [1.3.0] - 2024-01-15
### Added
- User dashboard with statistics and activity feed (#42)
- Real-time notifications system (#43)
- Dark mode support (#44)
### Fixed
- Memory leak in chart component (#45)
- Authentication timeout issue (#46)
### Changed
- Improved performance of data fetching (30% faster)
# الالتزام بسجل التغيير
git add CHANGELOG.md package.json
git commit -m "chore: bump version to 1.3.0"
git push
# دفع العلامة
git push origin v1.3.0
# إنشاء إصدار GitHub
gh release create v1.3.0 \
--title "Version 1.3.0 - Dashboard Feature" \
--notes "$(cat CHANGELOG.md | sed -n '/## \[1.3.0\]/,/## \[/p')" \
--latest
# البناء وإرفاق عناصر الإصدار
npm run build
gh release upload v1.3.0 dist/app.zip
# يحدث النشر تلقائياً عبر GitHub Actions
# مراقبة النشر
gh run list --workflow=deploy
gh run watch
أفضل ممارسة: استخدم الإصدار الدلالي (MAJOR.MINOR.PATCH) واحتفظ بـ CHANGELOG.md مفصل لكل إصدار.
سير عمل الإصلاح العاجل
تم اكتشاف خطأ حرج في الإنتاج:
طارئ: لا يمكن للمستخدمين تسجيل الدخول!
# 1. أنشئ فرع الإصلاح العاجل فوراً من علامة الإنتاج
git checkout -b hotfix/login-critical-bug v1.3.0
# 2. حدد وأصلح المشكلة بسرعة
# تم العثور على الخطأ: فحص انتهاء صلاحية رمز المصادقة معطل
git add src/auth/tokenService.ts
git commit -m "fix: correct token expiry validation logic
The expiry check was comparing timestamps incorrectly,
causing valid tokens to be rejected.
BREAKING ISSUE: Users unable to log in since v1.3.0 deployment
IMPACT: All users
SEVERITY: Critical"
# 3. اختبار الإصلاح محلياً
npm run test:auth
npm run test:e2e
# 4. إنشاء PR طارئ
gh pr create --title "HOTFIX: Fix critical login bug" \
--body "Critical fix for production login issue" \
--label "hotfix,critical" \
--reviewer @senior-dev \
--base main
# 5. الحصول على مراجعة سريعة ودمج
# المطور الأقدم يراجع خلال 15 دقيقة
gh pr merge 51 --squash
# 6. إنشاء إصدار إصلاح عاجل فوراً
git checkout main
git pull
npm version patch # 1.3.0 → 1.3.1
git push
git push origin v1.3.1
gh release create v1.3.1 \
--title "Version 1.3.1 - Critical Login Fix" \
--notes "## Critical Hotfix\n\nFixed authentication bug preventing user logins" \
--latest
# 7. مراقبة النشر
gh run watch
# 8. التحقق من الإصلاح في الإنتاج
curl https://api.company.com/health
# Status: OK
# 9. التواصل مع الفريق
# نشر في Slack: "تم نشر الإصلاح العاجل، تم استعادة تسجيل الدخول"
حرج: للإصلاحات العاجلة، السرعة ضرورية لكن لا تتخطى الاختبار. إصلاح عاجل سيء يمكن أن يجعل الأمور أسوأ. دع مطوراً أقدم يراجع دائماً.
سيناريوهات التراجع الطارئ
عندما يسوء النشر:
السيناريو: نشر v1.3.0 يسبب أخطاء
# الخيار 1: التراجع عن الالتزام المشكل
git revert <bad-commit-hash>
git push
# يطلق نشراً جديداً تلقائياً
# الخيار 2: التراجع إلى الإصدار السابق
git checkout v1.2.0
git checkout -b rollback/to-v1.2.0
git push origin rollback/to-v1.2.0
# إنشاء PR فوري
gh pr create --title "Rollback to v1.2.0" \
--body "Emergency rollback due to critical errors in v1.3.0" \
--label "rollback,critical"
# الخيار 3: إذا كنت تستخدم العلامات للنشر
# إعادة نشر الإصدار السابق
git tag -f production v1.2.0
git push origin production --force
# الخيار 4: استخدام API نشر GitHub
gh api repos/company/dashboard/deployments \
-f ref=v1.2.0 \
-f environment=production \
-f description="Emergency rollback"
# بعد التراجع
1. مراقبة معدلات الخطأ
2. تحليل ما حدث من خطأ
3. إنشاء قضية مع تقرير الحادث
4. الإصلاح في فرع جديد
5. نشر الإصلاح عندما يكون جاهزاً
التكامل مع CI/CD
سير العمل المهني مع التكامل المستمر:
# .github/workflows/ci.yml
name: Continuous Integration
on:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm run lint
- run: npm run test
- run: npm run build
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run security audit
run: npm audit --audit-level=moderate
deploy-staging:
needs: [test, security]
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to staging
run: ./scripts/deploy-staging.sh
env:
DEPLOY_KEY: ${{ secrets.STAGING_DEPLOY_KEY }}
المزالق الشائعة والحلول
تعلم من الأخطاء الشائعة:
المزلق 1: الالتزام بالأسرار
❌ git add .env
✓ أضف .env إلى .gitignore
✓ استخدم متغيرات البيئة
✓ خزّن الأسرار في GitHub Secrets
المزلق 2: التزامات كبيرة
❌ git commit -m "Friday changes"
✓ اجعل التزامات صغيرة ومركزة
✓ التزم بعد كل تغيير منطقي
المزلق 3: الدفع القسري إلى الفروع المشتركة
❌ git push --force origin main
✓ لا تدفع قسرياً أبداً إلى main/الفروع المحمية
✓ استخدم --force-with-lease على فروع الميزات
✓ تواصل قبل الدفع القسري
المزلق 4: عدم السحب قبل الدفع
❌ إجراء تغييرات، الدفع، الرفض
✓ اسحب دائماً قبل بدء العمل
✓ زامن بانتظام مع main أثناء التطوير
المزلق 5: رسائل التزام غير واضحة
❌ "fix stuff", "update", "temp"
✓ "fix(auth): correct token validation logic"
✓ اتبع تنسيق الالتزامات التقليدية
المزلق 6: عدم مراجعة PR الخاص بك
❌ إنشاء PR فوراً بعد آخر التزام
✓ راجع تغييراتك أولاً
✓ اختبر جميع السيناريوهات محلياً
✓ نظف تاريخ الالتزام
مهارات المهنة: Git في مقابلات العمل
معرفة Git التي تبهر القائمين على المقابلات:
أسئلة المقابلة الشائعة:
س: "اشرح git rebase مقابل git merge"
ج: Merge ينشئ التزام دمج مع الحفاظ على التاريخ.
Rebase يعيد كتابة التاريخ، وينشئ تاريخاً خطياً.
استخدم rebase لفروع الميزات قبل PR.
استخدم merge لدمج PRs المعتمدة.
س: "لقد التزمت بكلمة مرور عن طريق الخطأ. ماذا تفعل؟"
ج: 1. قم بتدوير كلمة المرور فوراً
2. احذفها من التاريخ باستخدام git filter-branch أو BFG
3. دفع قسري (قم بالتنسيق مع الفريق)
4. أضف إلى .gitignore لمنع التكرار
س: "كيف تحل تعارض الدمج؟"
ج: 1. حدد الملفات المتعارضة (git status)
2. افتح الملفات، ابحث عن علامات التعارض
3. ناقش مع الزميل إذا لزم الأمر
4. اختر النسخة الصحيحة أو ادمج التغييرات
5. احذف علامات التعارض
6. git add، ثم git commit
7. اختبر بدقة
س: "اشرح سير عمل Git الخاص بفريقك"
ج: صف Git Flow أو GitHub Flow
اشرح اتفاقيات تسمية الفروع
صف عملية PR والمراجعة
اذكر تكامل CI/CD
س: "كيف تحافظ على تحديث فرعك؟"
ج: دمج أو إعادة أساس main بانتظام في فرع الميزة
قبل إنشاء PR، تأكد من أن الفرع محدث
حل التعارضات تدريجياً، وليس كلها في النهاية
نصيحة المقابلة: لا تحفظ الأوامر فقط. اشرح لماذا تستخدم سير عمل معين وكيف يفيد الفريق. أظهر أنك تفهم التعاون، وليس فقط Git.
موارد التعليم المستمر
استمر في تحسين مهاراتك في Git و GitHub:
التوثيق الرسمي:
- Git Documentation: git-scm.com/doc
- GitHub Docs: docs.github.com
- Git Book (مجاني): git-scm.com/book
التعلم التفاعلي:
- Learn Git Branching: learngitbranching.js.org
- GitHub Skills: skills.github.com
- Git Immersion: gitimmersion.com
موضوعات متقدمة:
- كتاب Pro Git (الفصول المتقدمة)
- آليات Git الداخلية وأوامر السباكة
- خطافات Git والتشغيل الآلي
- إدارة المستودعات الكبيرة
- Git LFS والملفات الكبيرة
مشاريع التدريب:
- المساهمة في المصدر المفتوح
- إعداد سير عمل معقدة
- التجريب مع ميزات Git
- مساعدة زملاء الفريق في مشاكل Git
- توثيق ممارسات Git لفريقك
المجتمع:
- علامة git في Stack Overflow
- منتدى مجتمع GitHub
- قائمة بريد Git
- لقاءات Git المحلية
قائمة تحقق Git المهنية
أتقن هذه المهارات للتطوير المهني:
المهارات الأساسية (يجب أن تعرف):
☑ إنشاء واستنساخ المستودعات
☑ إجراء التزامات برسائل واضحة
☑ إنشاء ودمج الفروع
☑ حل تعارضات الدمج
☑ دفع وسحب التغييرات
☑ إنشاء طلبات السحب
☑ مراجعة الكود بفعالية
☑ استخدام .gitignore بشكل صحيح
☑ فهم Git Flow الأساسي
المهارات المتوسطة (يجب أن تعرف):
☑ إعادة الأساس التفاعلية (دمج، إعادة الصياغة)
☑ اختيار الالتزامات بعناية
☑ استخدام git stash بفعالية
☑ استرداد الفروع المحذوفة بـ reflog
☑ إعداد حماية الفرع
☑ تكوين CODEOWNERS
☑ كتابة سير عمل GitHub Actions
☑ استخدام git bisect للتصحيح
☑ فهم آليات git الداخلية
المهارات المتقدمة (من الجيد امتلاكها):
☑ تحسين المستودعات الكبيرة
☑ استخدام Git LFS للملفات الكبيرة
☑ كتابة خطافات Git مخصصة
☑ التصحيح باستخدام git reflog و fsck
☑ إدارة سيناريوهات الدمج المعقدة
☑ إعداد خوادم Git
☑ أتمتة سير عمل Git
☑ المساهمة في تطوير Git
مشروع ختامي:
محاكاة سير العمل المهني الكامل:
- أنشئ مستودعاً جديداً بإعداد كامل (README، .gitignore، CONTRIBUTING.md، حماية الفرع)
- أنشئ قضية لميزة تريد بناءها
- أنشئ فرع ميزة واجعل 5+ التزامات تتبع الالتزامات التقليدية
- أنشئ فرعاً آخر يحاكي عمل زميل سيتعارض
- ادمج كلا الفرعين وحل التعارض
- أنشئ طلب سحب مع وصف شامل
- قم بإعداد GitHub Actions للاختبار التلقائي
- حاكِ ملاحظات مراجعة الكود وعالج التعليقات
- ادمج PR وأنشئ إصداراً مع الإصدار الدلالي
- أنشئ فرع إصلاح عاجل لخطأ طارئ
- وثق سير عملك بالكامل في ملف WORKFLOW.md
الملخص النهائي
تهانينا على إكمال هذا البرنامج التعليمي الشامل لـ Git و GitHub! دعنا نلخص كل ما تعلمته:
الوحدة 1: أساسيات التحكم في الإصدار
✓ فهم أنظمة التحكم في الإصدار
✓ تثبيت وتكوين Git
✓ معمارية Git ونموذج البيانات
✓ سير عمل Git الأساسي
الوحدة 2: أوامر Git الأساسية
✓ تتبع التغييرات وإجراء الالتزامات
✓ عرض التاريخ والفروقات
✓ التراجع عن التغييرات بأمان
✓ العمل مع الفروع
✓ الدمج وإعادة الأساس
الوحدة 3: المستودعات البعيدة
✓ فهم البعيد
✓ دفع وسحب التغييرات
✓ استنساخ المستودعات
✓ العمل مع العلامات
✓ تخبئة التغييرات
الوحدة 4: أساسيات GitHub
✓ ميزات منصة GitHub
✓ إنشاء المستودعات
✓ إدارة القضايا
✓ طلبات السحب ومراجعة الكود
✓ الفورك والمساهمة
✓ أساسيات GitHub Actions
الوحدة 5: سير عمل التعاون
✓ Git Flow و GitHub Flow و Trunk-Based Development
✓ أفضل ممارسات مراجعة الكود
✓ حل تعارضات الدمج
✓ استراتيجيات التعاون الجماعي
الوحدة 6: موضوعات متقدمة
✓ خطافات Git والتشغيل الآلي
✓ أوامر Git المتقدمة
✓ آليات Git الداخلية واستكشاف الأخطاء
✓ أفضل الممارسات والأمان
✓ ميزات GitHub المتقدمة
✓ إعداد التعاون الجماعي
الوحدة 7: التطوير المهني
✓ سير عمل المشروع الكاملة
✓ روتين التطوير اليومي
✓ إدارة الإصدار
✓ إجراءات الإصلاح العاجل والتراجع
✓ تكامل CI/CD
✓ مهارات المهنة والتعليم المستمر
رحلتك مع Git و GitHub
لقد أتقنت الآن Git و GitHub من المستوى المبتدئ إلى المستوى المهني. إليك ما يمكنك فعله بعد ذلك:
الإجراءات الفورية:
1. طبق هذه المهارات في مشاريعك الحالية
2. قم بإعداد سير عمل Git مناسب لفريقك
3. ساهم في مشاريع المصدر المفتوح
4. ساعد الآخرين على تعلم Git
5. وثق ممارسات Git لفريقك
النمو طويل الأمد:
- استكشف آليات Git الداخلية المتقدمة
- أتقن سيناريوهات سير العمل المعقدة
- أتمت مهام Git المتكررة
- ساهم في تطوير Git أو GitHub
- كن خبير Git لفريقك
شارك معرفتك:
- قم بإرشاد المطورين المبتدئين
- اكتب مقالات مدونة عن Git
- أنشئ دروساً تعليمية لـ Git
- تحدث في اللقاءات عن سير عمل Git
- ساهم في توثيق Git
تذكر: إتقان Git يأتي مع الممارسة. لا تخف من التجربة في مستودعات الاختبار. الجميع يرتكب أخطاء مع Git—المفتاح هو تعلم كيفية التعافي منها. احتفظ بهذا البرنامج التعليمي كمرجع وأعد زيارة الأقسام حسب الحاجة. برمجة سعيدة!
شكراً لك على إكمال هذا البرنامج التعليمي الشامل لـ Git و GitHub. أنت الآن مجهز بمهارات التحكم في الإصدار على المستوى المهني. اذهب وابنِ أشياء مذهلة!