Git: دليل أفضل الممارسات في استخدام Git والتعاون بين أعضاء…

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

1. إرشادات التقديم

(1) لماذا تُعد معلومات الالتزام الموحدة ضرورية؟

يمكن لمعلومات الإرسال المُهيأة بشكل صحيح أن:

(2) معيار الالتزامات التقليدية

هذه هي القاعدة الأكثر شيوعًا حاليًا لكتابة رسائل الالتزام:

TEXT 📖 للعرض فقط
<type>(<scope>): <subject>

<body>

<footer>

شرح كل قسم:

(3) شرح مفصل لأنواع الطلبات

النوع الوصف مثال
ميزة ميزة جديدة ميزة: تمت إضافة وظيفة تسجيل دخول المستخدم
تصحيح تصحيح خطأ تصحيح: تم إصلاح خطأ المصادقة عند تسجيل الدخول
docs تحديثات الوثائق docs: تحديث وثائق واجهة برمجة التطبيقات
النمط تنسيق الكود النمط: ضبط مسافة التبويب في الكود
إعادة هيكلة إعادة الهيكلة إعادة الهيكلة: تحسين منطق الاستعلام
perf تحسين الأداء perf: تحسين استعلامات قاعدة البيانات
اختبار اختبار اختبار: إضافة اختبار وحدة
مهمة البناء/الأدوات المهمة: تحديث إعدادات البناء
ci تكوين CI ci: إضافة GitHub Actions
التراجع التراجع التراجع: التراجع عن ميزة تسجيل الدخول

▶ مثال: رسالة التثبيت الصحيحة

BASH
# 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) أفضل الممارسات لتقديم المعلومات

رسائل الالتزام الجيدة:

TEXT 📖 للعرض فقط
feat(auth): AddOAuth2.0Login Support

- SupportGoogle、GitHub、WeChat Third-Party Login
- Add Login State Persistence
- Enable Auto-RefreshTokenMechanism

Closes #456

رسائل الالتزام غير الملائمة:

TEXT 📖 للعرض فقط
update
fix bug
I made a few changes.
WIP
asdfasdf

أفضل الممارسات:



2. استراتيجية التفرع

(1) نموذج Git Flow

تُعد «Git Flow» الاستراتيجية الأكثر تقليدية للتفرع:

100%
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

نوع الفرع:

▶ مثال: سير عمل Git Flow

BASH
# 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» أبسط وأكثر ملاءمةً للنشر المستمر:

100%
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

الميزات:

▶ مثال: سير عمل GitHub Flow

BASH
# 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) سير العمل اليومي في مجال التطوير

100%
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) عملية تطوير الميزات

▶ مثال: عملية تطوير الميزات الكاملة

BASH
# 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) عملية إصلاح الأخطاء

▶ مثال: عملية إصلاح الأخطاء

BASH
# 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):

عند مراجعة طلب العلاقات العامة:

▶ مثال: نموذج وصف العلاقات العامة

MARKDOWN
**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) استراتيجيات حل النزاعات

▶ مثال: منع النزاعات وحلها

BASH
# 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) حافظ على تنظيم السجل

▶ مثال: سجل عمليات الالتزام النظيف

BASH
# 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

BASH
# 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 كامل

TEXT 📖 للعرض فقط
# 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

▶ مثال: ربط ما قبل الالتزام

BASH
#!/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) التعامل مع الأخطاء الشائعة

▶ مثال: معالجة الأخطاء

BASH
# 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

BASH
# 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"، واكتب رسائل تسجيل واضحة، وتجنب عمليات التسجيل التي لا معنى لها.
س أيهما يجب أن أستخدم، Git Flow أم GitHub Flow؟
ج يُعد «Git Flow» مناسبًا للمشاريع التي لها دورة إصدار محددة، بينما يُعد «GitHub Flow» مناسبًا للمشاريع التي تعتمد على النشر المستمر. أما بالنسبة للمشاريع الصغيرة، فيُوصى باستخدام «GitHub Flow» لأنه أبسط وأكثر كفاءة.
س كيف ينبغي لنا التعامل مع تطوير الميزات على المدى الطويل؟
ج قم بدمج التحديثات بانتظام من فرع main/develop للحفاظ على التزامن، واستخدم علامات الميزات للتحكم في تفعيل الميزات، وقم بتقسيم الميزات الرئيسية إلى طلبات سحب أصغر حجمًا من أجل الدمج التدريجي.
س كيف يمكنني تجنب تعارضات الدمج؟
ج قم بمزامنة الكود عن بُعد بشكل متكرر، واتخذ خطوات صغيرة وسريعة مع إجراء عمليات إرسال متكررة، وتواصل على الفور لتنسيق نطاق التغييرات، واستخدم rebase بدلاً من merge.
س بأي لغة يجب تقديم المعلومات؟
ج نوصي باستخدام اللغة الإنجليزية، لأنها تتوافق مع المعايير الدولية وتسهل التعاون في مجال البرمجيات مفتوحة المصدر. يمكن استخدام اللغة الصينية في مشاريع الفريق الداخلية، ولكن يجب الحفاظ على الاتساق.

📖 ملخص


📝 تمارين

  1. التدريبات الأساسية: قم بإعداد بيئة Git الخاصة بك، بما في ذلك معلومات المستخدم والأسماء المستعارة والمحرر؛ وقم بإنشاء رسائل الالتزام (commit) التي تتبع أفضل الممارسات؛ واكتسب عادات جيدة في استخدام Git.

  2. تمرين متقدم: قم بتنفيذ سير عمل GitHub Flow بالكامل: أنشئ فرعًا للميزة، وقم بتطوير الميزة، وأنشئ طلب سحب (محاكاة)، وادمج الفرع، وقم بتنظيف الفرع لتجربة عملية التعاون بين أعضاء الفريق.

  3. التحدي: اكتب دليلًا لمستخدمي Git مخصصًا للفريق، يتضمن إرشادات حول عمليات الالتزام (commit)، وسياسات إنشاء الفروع، وسير العمل، وحلولًا للمشكلات الشائعة، وذلك لمساعدة أعضاء الفريق على اكتساب عادات جيدة في استخدام Git.


🎉 تهانينا! لقد أكملت الدرس التعليمي الكامل حول Git وأتقنت المهارات الأساسية للتحكم في الإصدارات!

توصيات لمزيد من الدراسة:

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%