Git: دليل أفضل الممارسات في استخدام Git والتعاون بين أعضاء…
يمكن أن تؤدي الممارسات الجيدة في استخدام Git إلى تحسين التعاون بين أعضاء الفريق وجودة الكود بشكل ملحوظ. يلخص هذا القسم أفضل الممارسات في استخدام Git، بما في ذلك إرشادات إجراء عمليات الالتزام (commit)، واستراتيجيات إنشاء الفروع، وسير العمل، والتعاون بين أعضاء الفريق.
1. إرشادات التقديم
(1) لماذا تُعد معلومات الالتزام الموحدة ضرورية؟
يمكن لمعلومات الإرسال المُهيأة بشكل صحيح أن:
- وصف التغييرات بوضوح: فهم سريع لما يتضمنه كل «كوميت»
- دعم أدوات الأتمتة: إنشاء سجلات التغييرات تلقائيًا
- سهولة تتبع السجل: الاطلاع على سجلات التطوير الخاصة بميزات محددة
- تحسين كفاءة التعاون: خفض تكاليف الاتصال
(2) معيار الالتزامات التقليدية
هذه هي القاعدة الأكثر شيوعًا حاليًا لكتابة رسائل الالتزام:
<type>(<scope>): <subject>
<body>
<footer>
شرح كل قسم:
- النوع (مطلوب): نوع الإرسال
- النطاق (اختياري): نطاق التأثير
- الموضوع (مطلوب): وصف موجز (50 حرفًا أو أقل)
- النص (اختياري): وصف تفصيلي
- التذييل (اختياري): معلومات التذييل (مثل: «إغلاق المشكلة»)
(3) شرح مفصل لأنواع الطلبات
| النوع | الوصف | مثال |
|---|---|---|
| ميزة | ميزة جديدة | ميزة: تمت إضافة وظيفة تسجيل دخول المستخدم |
| تصحيح | تصحيح خطأ | تصحيح: تم إصلاح خطأ المصادقة عند تسجيل الدخول |
| docs | تحديثات الوثائق | docs: تحديث وثائق واجهة برمجة التطبيقات |
| النمط | تنسيق الكود | النمط: ضبط مسافة التبويب في الكود |
| إعادة هيكلة | إعادة الهيكلة | إعادة الهيكلة: تحسين منطق الاستعلام |
| perf | تحسين الأداء | perf: تحسين استعلامات قاعدة البيانات |
| اختبار | اختبار | اختبار: إضافة اختبار وحدة |
| مهمة | البناء/الأدوات | المهمة: تحديث إعدادات البناء |
| ci | تكوين CI | ci: إضافة GitHub Actions |
| التراجع | التراجع | التراجع: التراجع عن ميزة تسجيل الدخول |
▶ مثال: رسالة التثبيت الصحيحة
# Single-line commit
git commit -m "feat: Add User Login Functionality"
# Range-Based Submissions
git commit -m "feat(auth): AddJWTCertification Support"
# Multi-line commit
git commit -m "feat(auth): AddOAuth2.0Login Support" -m "- SupportGoogle、GitHubLog In" -m "- Add Login State Persistence" -m "Closes #123"
# Use the editor to write a detailed commit message
git commit
(4) أفضل الممارسات لتقديم المعلومات
رسائل الالتزام الجيدة:
feat(auth): AddOAuth2.0Login Support
- SupportGoogle、GitHub、WeChat Third-Party Login
- Add Login State Persistence
- Enable Auto-RefreshTokenMechanism
Closes #456
رسائل الالتزام غير الملائمة:
update
fix bug
I made a few changes.
WIP
asdfasdf
أفضل الممارسات:
- ✅ استخدم جملة أمرية (استخدم «أضف» بدلاً من «أضيف»)
- ✅ كتابة الحرف الأول بحرف صغير
- ✅ لا تضف نقطة في النهاية
- ✅ وصف الموضوع في 50 حرفًا أو أقل
- ✅ يشرح قسم «المحتوى» «ماذا» و«لماذا»، وليس «كيف»
2. استراتيجية التفرع
(1) نموذج Git Flow
تُعد «Git Flow» الاستراتيجية الأكثر تقليدية للتفرع:
graph TB
main[main<br/>Production Environment] --> release[release/*<br/>Preparing for Release]
release --> develop[develop<br/>Development Environment]
develop --> feature[feature/*<br/>Feature Development]
main --> hotfix[hotfix/*<br/>Emergency Fix]
style main fill:#d4edda
style develop fill:#fff3cd
style feature fill:#e1f5ff
style hotfix fill:#f8d7da
نوع الفرع:
- main: كود بيئة الإنتاج؛ يُحافظ عليه دائمًا في حالة جاهزة للنشر
- التطوير: تطوير الكود في بيئة التطوير ودمج فروع الميزات المختلفة
- feature: فرع تطوير الميزة، تم إنشاؤه من فرع "develop"
- الإصدار: فرع جاهز للإصدار تم إنشاؤه من
develop - تصحيح عاجل: فرع للتصحيحات العاجلة، تم إنشاؤه من الفرع الرئيسي
▶ مثال: سير عمل Git Flow
# 1. Create a feature branch from develop
git checkout develop
git checkout -b feature/user-auth
# 2. Develop and Submit
git add .
git commit -m "feat(auth): Add User Authentication"
# 3. Merge back intodevelop
git checkout develop
git merge --no-ff feature/user-auth
git branch -d feature/user-auth
# 4. Create a release branch
git checkout -b release/v1.0.0
# 5. Preparing for Release(FixBug、Update version numbers, etc.)
git commit -m "chore: Update the version number to1.0.0"
# 6. Merge into main and develop
git checkout main
git merge --no-ff release/v1.0.0
git tag -a v1.0.0 -m "Version 1.0.0"
git checkout develop
git merge --no-ff release/v1.0.0
git branch -d release/v1.0.0
# 7. Emergency Fix
git checkout main
git checkout -b hotfix/critical-bug
git commit -m "fix: Urgent FixBug"
git checkout main
git merge --no-ff hotfix/critical-bug
git tag -a v1.0.1 -m "Version 1.0.1"
git checkout develop
git merge --no-ff hotfix/critical-bug
git branch -d hotfix/critical-bug
(2) نموذج GitHub Flow
يُعد «GitHub Flow» أبسط وأكثر ملاءمةً للنشر المستمر:
graph LR
A[main<br/>Always deployable] --> B[featureBranch]
B --> C[Pull Request]
C --> D[Merge intomain]
D --> E[Automatic Deployment]
style A fill:#d4edda
style E fill:#c3e6cb
الميزات:
- الفرع الرئيسي قابل للنشر دائمًا
- إنشاء فرع ميزات من
main - قم بإنشاء طلب سحب بمجرد اكتمال عملية التطوير
- دمج التغييرات في الفرع الرئيسي بعد المراجعة
- النشر التلقائي بعد الدمج
▶ مثال: سير عمل GitHub Flow
# 1. Update Locallymain
git checkout main
git pull origin main
# 2. Create a feature branch
git checkout -b feature/new-feature
# 3. Develop and Submit
git add .
git commit -m "feat: Add a New Feature"
# 4. Push Branch
git push -u origin feature/new-feature
# 5. Create a Pull Request on GitHub
# 6. Merge after the code review is approved
# 7. Clean Up Branches
git checkout main
git pull origin main
git branch -d feature/new-feature
git push origin --delete feature/new-feature
(3) قواعد تسمية الفروع
| نوع الفرع | قاعدة التسمية | مثال |
|---|---|---|
| ميزة | feature/* | feature/user-authentication |
| تصحيح الأخطاء | fix/* | fix/login-validation |
| تصحيح عاجل | hotfix/* | hotfix/ثغرة أمنية |
| الإصدار | release/* | release/v1.0.0 |
| تجربة | experiment/* | experiment/new-architecture |
3. سير العمل
(1) سير العمل اليومي في مجال التطوير
sequenceDiagram
participant Developer
participant Local Warehouse
participant Remote Repository
participant CI/CD
Developer->>Local Warehouse: git pullUpdate the code
Developer->>Local Warehouse: Create a feature branch
Developer->>Local Warehouse: Develop and Submit
Developer->>Remote Repository: git pushPush Branch
Developer->>Remote Repository: CreatePull Request
Remote Repository->>CI/CD: Automated Testing
CI/CD->>Remote Repository: Test Passed
Remote Repository->>Local Warehouse: Merge intomain
Developer->>Local Warehouse: git pullSynchronize
(2) عملية تطوير الميزات
▶ مثال: عملية تطوير الميزات الكاملة
# 1. Start Developing New Features
git checkout main
git pull origin main
git checkout -b feature/user-profile
# 2. Submit Regularly(Iterate quickly)
git add src/profile.js
git commit -m "feat(profile): Add User Profile Page"
git add src/api/profile.js
git commit -m "feat(profile): Add InformationAPIInterface"
git add src/test/profile.test.js
git commit -m "test(profile): Add Unit Tests"
# 3. Stay in touch withmainSynchronize
git fetch origin
git rebase origin/main
# 4. Push and CreatePR
git push -u origin feature/user-profile
# 5. PRMerge after approval
# 6. Cleanup
git checkout main
git pull origin main
git branch -d feature/user-profile
(3) عملية إصلاح الأخطاء
▶ مثال: عملية إصلاح الأخطاء
# 1. Create a fix branch from main
git checkout main
git pull origin main
git checkout -b fix/login-error
# 2. Identify and FixBug
# View logs to troubleshoot issues
git log --grep="login"
# Fix the code
git add src/auth.js
git commit -m "fix(auth): Fix the login authentication error
- Fix the validation logic for empty passwords
- Add an input length check
Fixes #789"
# 3. Push and CreatePR
git push -u origin fix/login-error
# 4. Post-merger cleanup
git checkout main
git pull origin main
git branch -d fix/login-error
4. مهارات العمل الجماعي
(1) مراجعة الكود
أفضل الممارسات المتعلقة بطلبات السحب:
عند إنشاء طلب سحب (PR):
- ✅ كتابة عناوين وأوصاف واضحة للبيانات الصحفية
- ✅ رابط إلى المشكلة ذات الصلة
- ✅ اجعل طلبات السحب صغيرة ومركزة (<400 سطر من التعليمات البرمجية)
- ✅ التأكد من نجاح اختبارات التكامل المستمر
- ✅ أضف أي لقطات شاشة أو عروض توضيحية ضرورية
عند مراجعة طلب العلاقات العامة:
- ✅ التحقق من جودة الكود ومنطقه
- ✅ إجراء اختبارات محلية
- ✅ تقديم ملاحظات بناءة
- ✅ الرد بسرعة على تعليقات المراجعات
▶ مثال: نموذج وصف العلاقات العامة
**Feature Description**
Add User Profile Page,Supports viewing and editing user information。
**Details of the Changes**
- New Profile Components
- Add Information Edit Form
- Implement the profile picture upload feature
- Add Unit Tests
**Test**
- [x] Unit tests passed
- [x] Manual testing completed
- [x] Responsive Layout Testing
**Screenshot**
[Add a screenshot]
**RelatedIssue**
Closes #123
(2) استراتيجيات حل النزاعات
▶ مثال: منع النزاعات وحلها
# Conflict Prevention
# 1. Synchronize remote code frequently
git fetch origin
git rebase origin/main
# 2. Iterate quickly,Frequent Submissions
# Commit after completing each small feature
# 3. Timely Communication,Scope of Coordinated Revisions
# Resolving Conflicts
# 1. Pull the latest code
git pull --rebase origin main
# 2. Resolving Conflicts
# Editing Files with Conflicts,Keep the correct content
# 3. Mark the conflict as resolved
git add .
# 4. Continuerebase
git rebase --continue
# 5. Push
git push origin feature
(3) حافظ على تنظيم السجل
▶ مثال: سجل عمليات الالتزام النظيف
# UsagerebaseMerge Commit
git rebase -i HEAD~3
# In the editor:
# pick a1b2c3d feat: Add FeatureA
# squash d4e5f6g feat: Improve functionalityA
# squash h7i8j9k feat: Optimization FeaturesA
# Edit the merged commit message after saving
# feat: Add FeatureA
# Usagerebaserather thanmerge
git pull --rebase origin main
# View the complete history
git log --oneline --graph
# Output:
# * a1b2c3d feat: Add FeatureC
# * d4e5f6g feat: Add FeatureB
# * h7i8j9k feat: Add FeatureA
5. أفضل الممارسات لتكوين Git
(1) الإعدادات العامة الموصى بها
▶ مثال: تهيئة Git
# User Information
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# Default Editor
git config --global core.editor "code --wait"
# Default branch name
git config --global init.defaultBranch main
# Automatic Line Break Conversion
git config --global core.autocrlf input # Linux/Mac
git config --global core.autocrlf true # Windows
# Pull Strategy
git config --global pull.rebase true
# Push Strategy
git config --global push.default simple
# Voucher Storage
git config --global credential.helper store
# Alias Configuration
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
(2) تهيئة ملف .gitignore
▶ مثال: ملف .gitignore كامل
# Dependency Directory
node_modules/
vendor/
venv/
# Compilation Output
dist/
build/
out/
*.o
*.class
*.jar
*.exe
# IDELayout
.vscode/
.idea/
*.swp
*.swo
.DS_Store
# Environment Configuration
.env
.env.local
.env.*.local
config.local.js
# Log Files
*.log
logs/
npm-debug.log*
yarn-debug.log*
# Test Coverage
coverage/
.nyc_output/
# Temporary Files
tmp/
temp/
*.tmp
*.temp
# Operating System Files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
(3) ربطات Git
▶ مثال: ربط ما قبل الالتزام
#!/bin/bash
# .git/hooks/pre-commit
# Run Code Check
npm run lint
if [ $? -ne 0 ]; then
echo "❌ Code check failed,Please fix it and then submit it."
exit 1
fi
# Run Test
npm test
if [ $? -ne 0 ]; then
echo "❌ Test Failed,Please fix it and then submit it."
exit 1
fi
echo "✅ Code review and testing passed"
exit 0
6. الأسئلة الشائعة وحلولها
(1) التعامل مع الأخطاء الشائعة
▶ مثال: معالجة الأخطاء
# Error1:Push Rejected
git push origin main
# ! [rejected] main -> main (fetch first)
# Resolve:
git pull --rebase origin main
git push origin main
# Error2:Merge Conflicts
git merge feature
# CONFLICT (content): Merge conflict in file.js
# Resolve:
# Editing Files with Conflicts
git add file.js
git commit
# Error3:detached HEAD
git checkout a1b2c3d
# You are in 'detached HEAD' state
# Resolve:
git switch -c new-branch
# Error4:Accidentally Deleted a Branch
git branch -D feature
# Restore:
git reflog
git checkout -b feature <commit-id>
(2) تحسين الأداء
▶ مثال: تحسين أداء Git
# Optimizing the Performance of Large Repositories
git gc --aggressive
# Partial Clone(Large Warehouse)
git clone --filter=blob:none --sparse <url>
git sparse-checkout init --cone
git sparse-checkout add src/
# Shallow Cloning(Only the most recent history is needed)
git clone --depth=1 <url>
# Disable File Mode Change Detection(Windows)
git config core.fileMode false
❓ أسئلة شائعة
git rebase -i لدمج عمليات التسجيل ذات الصلة، واستخدم git pull --rebase بدلاً من كلمة "merge"، واكتب رسائل تسجيل واضحة، وتجنب عمليات التسجيل التي لا معنى لها.rebase بدلاً من merge.📖 ملخص
- إرشادات إجراء عمليات التسجيل: اتبع إرشادات «Conventional Commits» واكتب رسائل تسجيل واضحة
- استراتيجيات التفرع: يُعد «Git Flow» مناسبًا للمشاريع التي تتبع دورات إصدار، في حين يُعد «GitHub Flow» مناسبًا للنشر المستمر
- سير العمل: التكرار السريع، والتسجيل المتكرر، والمزامنة المنتظمة، وإجراء مراجعات للكود
- التعاون بين أعضاء الفريق: مراجعة العلاقات العامة، وحل النزاعات، والحفاظ على سجل نظيف
- إعدادات Git: إعداد الأسماء المستعارة وبيانات الاعتماد و«الهوكات» لتحسين الكفاءة
- أفضل الممارسات: العمليات الموحدة، والتواصل الواضح، والتعلم المستمر
📝 تمارين
-
التدريبات الأساسية: قم بإعداد بيئة Git الخاصة بك، بما في ذلك معلومات المستخدم والأسماء المستعارة والمحرر؛ وقم بإنشاء رسائل الالتزام (commit) التي تتبع أفضل الممارسات؛ واكتسب عادات جيدة في استخدام Git.
-
تمرين متقدم: قم بتنفيذ سير عمل GitHub Flow بالكامل: أنشئ فرعًا للميزة، وقم بتطوير الميزة، وأنشئ طلب سحب (محاكاة)، وادمج الفرع، وقم بتنظيف الفرع لتجربة عملية التعاون بين أعضاء الفريق.
-
التحدي: اكتب دليلًا لمستخدمي Git مخصصًا للفريق، يتضمن إرشادات حول عمليات الالتزام (commit)، وسياسات إنشاء الفروع، وسير العمل، وحلولًا للمشكلات الشائعة، وذلك لمساعدة أعضاء الفريق على اكتساب عادات جيدة في استخدام Git.
🎉 تهانينا! لقد أكملت الدرس التعليمي الكامل حول Git وأتقنت المهارات الأساسية للتحكم في الإصدارات!
توصيات لمزيد من الدراسة:
- دراسة متعمقة لآليات عمل Git الداخلية
- استكشاف الميزات المتقدمة: الوحدات الفرعية، وأشجار العمل، وفروع التصفية
- تعرف على كيفية إعداد خادم Git: GitLab، Gitea
- تعرف على تكامل Git مع الأدوات الأخرى: CI/CD، وبيئات التطوير المتكاملة (IDEs)