در وردپرس، Git یکی از ضروری‌ترین ابزارهای توسعه حرفه‌ای است که تیم را از آشوب نسخه‌بندی نجات می‌دهد و امکان همکاری همزمان چند توسعه‌دهنده روی قالب و افزونه را ممکن می‌سازد. بدون استراتژی Branch، بدون فایل .gitignore صحیح و بدون فرآیند Code Review، هر پروژه وردپرسی در مقیاس بزرگ به مجموعه‌ای از فایل‌های پراکنده تبدیل می‌شود که بازسازی آن هفته‌ها زمان می‌برد. تفاوت Git و SVN، مدل Branching و استراتژی Merge، تصمیم‌های معماری را به تصمیم‌های تیمی گره می‌زند و انتخاب اشتباه هر کدام، هزینه پنهان ایجاد می‌کند. مدیریت فایل‌های حساس، جداسازی محیط توسعه از تولید و استراتژی انتشار، سه لایه ضروری در Git Workflow هستند و نادیده گرفتن هر کدام، هزینه نگهداشت را چند برابر می‌کند. تست Git Workflow در سه سطح Commit، Branch و Release انجام می‌شود و بدون آن، انتشار به تولید ریسک بالایی دارد. در این راهنما از اصول پایه تا استقرار تولیدی Git در پروژه‌های وردپرسی را با نگاه مهندسی و کد عملی پوشش می‌دهیم.

در پروژه‌های واقعی، اولین بار که با تیم دو یا چند نفره روی یک قالب کار می‌کنم، بدون Git، اختلاف فایل‌ها و کد از دست رفته به یک کابوس روزانه تبدیل می‌شود. این راهنما از همان نقطه‌ای شروع می‌کند که تجربه می‌گوید بیشترین ارزش را دارد.

Git چیست و چرا برای وردپرس ضروری است؟

Git یک سیستم کنترل نسخه توزیع‌شده است که هر تغییر در کد را ثبت می‌کند و امکان بازگشت، مقایسه و همکاری همزمان را فراهم می‌سازد.

در وردپرس، Git برای سه هدف اصلی استفاده می‌شود:

  1. مدیریت نسخه قالب و افزونه اختصاصی.
  2. همکاری چند توسعه‌دهنده روی یک پروژه.
  3. استقرار خودکار در محیط تولید.

پیش از ادامه، راهنمای Child Theme حرفه‌ای و سفارشی‌سازی را مطالعه کنید. اگر با ساختار فایل‌های قالب آشنایی ندارید، راهنمای ساختار فایل‌های قالب استاندارد وردپرس نقطه شروع مناسبی است.

تفاوت Git و SVN

Git توزیع‌شده است و هر توسعه‌دهنده یک نسخه کامل دارد. SVN متمرکز است و نیازمند اتصال به سرور مرکزی است. برای پروژه‌های وردپرسی مدرن، Git انتخاب استاندارد است.

راه‌اندازی Git در پروژه وردپرسی

راه‌اندازی Git در پروژه وردپرسی، نیازمند درک ساختار پوشه است. معمولاً فقط قالب یا افزونه اختصاصی در Git قرار می‌گیرد، نه کل وردپرس.

# در پوشه قالب یا افزونه
cd wp-content/themes/mycustom-theme/
git init
git add .
git commit -m "Initial commit: theme structure"
git branch -M main
git remote add origin git@github.com:user/mycustom-theme.git
git push -u origin main

مخزن کامل وردپرس یا فقط محتوا

دو رویکرد وجود دارد:

  1. مخزن کامل وردپرس: همه فایل‌ها شامل هسته، قالب و افزونه. مناسب پروژه‌های کوچک.
  2. مخزن اختصاصی: فقط قالب و افزونه اختصاصی. مناسب پروژه‌های حرفه‌ای با مدیریت Composer.

برای پروژه‌های متوسط و بزرگ، رویکرد دوم توصیه می‌شود.

فایل .gitignore حرفه‌ای

فایل .gitignore از اضافه شدن فایل‌های غیرضروری یا حساس به مخزن جلوگیری می‌کند.

# WordPress core
/wp-admin/
/wp-includes/
/wp-*.php
/index.php
/xmlrpc.php
/license.txt
/readme.html

# Uploads
/wp-content/uploads/

# Cache
/wp-content/cache/
/wp-content/advanced-cache.php
/wp-content/wp-cache-config.php

# wp-config
wp-config.php
wp-config-local.php

# Node modules
node_modules/
vendor/

# Build artifacts
build/
dist/

# Logs
*.log

# OS files
.DS_Store
Thumbs.db

# Editor files
.idea/
.vscode/
*.sublime-*

فایل‌های حساس که هرگز نباید Commit شوند

wp-config.php
.env
*.pem
*.key
.htpasswd
uploads/
backups/

نمونه .gitignore برای قالب اختصاصی

node_modules/
build/
.DS_Store
*.log
.env
.vscode/
.idea/
acf-json/  # در صورت ذخیره در قالب
languages/*.mo

استراتژی Branch در پروژه وردپرس

Branching استراتژی، تعیین می‌کند که چگونه تغییرات را سازمان‌دهی کنید.

# استراتژی GitHub Flow
main          → نسخه پایدار تولید
develop       → نسخه در حال توسعه
feature/xyz   → ویژگی جدید
bugfix/xyz    → رفع باگ
hotfix/xyz    → رفع فوری در تولید

استراتژی Branch برای تیم‌های کوچک

main          → تولید
staging       → آزمایش
feature/xyz   → توسعه

قواعد نام‌گذاری Branch

feature/add-checkout-field
bugfix/fix-login-error
hotfix/critical-security-patch
refactor/theme-header
docs/update-readme

راهنمای برنچ در Git راهنمای مدیریت شاخه‌ها نقطه شروع مناسبی است.

Commit و پیام‌های استاندارد

Commit واحد اصلی ثبت تغییرات است. پیام Commit باید واضح، کوتاه و توصیفی باشد.

# ساختار Conventional Commits
<type>(<scope>): <subject>

type: feat, fix, docs, style, refactor, test, chore
scope: theme, plugin, functions, header, footer
subject: توصیف کوتاه

نمونه پیام‌های استاندارد

feat(theme): add mega menu support
fix(plugin): resolve HPOS compatibility issue
docs(readme): update installation instructions
refactor(functions): extract helper functions
test(theme): add unit tests for template tags

قواعد Commit حرفه‌ای

  1. هر Commit یک تغییر منطقی.
  2. پیام Commit به زمان حال و امر.
  3. Commit بزرگ را به چند Commit کوچک بشکنید.
  4. هیچ‌وقت فایل‌های حساس را Commit نکنید.

Merge و مدیریت تضاد

Merge ادغام تغییرات دو Branch است. در پروژه‌های وردپرسی، تضاد معمولاً در فایل‌های functions.php و style.css رخ می‌دهد.

# مرج Branch feature به main
git checkout main
git pull origin main
git merge feature/add-checkout-field
git push origin main

حل تضاد در فایل‌های وردپرسی

<<<<<<< HEAD
function my_function() {
    return "version A";
}
=======
function my_function() {
    return "version B";
}
>>>>>>> feature/add-checkout-field

پس از حل، فایل را ذخیره و مراحل Merge را کامل کنید.

git add functions.php
git commit -m "merge: resolve conflict in functions.php"

راهنمای چگونه تعارض گیت را بدون از دست دادن کدها حل کنیم نقطه شروع مناسبی است.

Rebase یا Merge

Rebase تاریخ را خطی می‌کند و Merge تاریخ را حفظ می‌کند. برای پروژه‌های تیمی، Merge ترجیح داده می‌شود چون تاریخچه را حفظ می‌کند.

Git Flow و GitHub Flow

دو استراتژی اصلی Workflow وجود دارد:

  1. Git Flow: مناسب پروژه‌های بزرگ با نسخه‌بندی دقیق.
  2. GitHub Flow: مناسب پروژه‌های با انتشار مکرر.
Git Flow:
- main (تولید)
- develop (توسعه)
- feature/* 
- release/* 
- hotfix/*

GitHub Flow:
- main (تولید)
- feature/*

برای پروژه‌های وردپرسی متوسط، GitHub Flow توصیه می‌شود.

نسخه‌بندی با Tag

git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0

راهنمای نسخه‌بندی معنایی در گیت‌هاب نقطه شروع مناسبی است.

Code Review و Pull Request

Pull Request ابزار اصلی Code Review در GitHub است.

# ساخت Pull Request
1. Push Branch به مخزن
2. در GitHub روی "Compare & pull request" کلیک کنید
3. توضیح تغییرات، دلیل و اسکرین‌شات اضافه کنید
4. Reviewer را تعیین کنید
5. پس از تایید، Merge کنید

معیارهای Code Review در وردپرس

  1. رعایت WordPress Coding Standards.
  2. Escape داده‌های خروجی.
  3. عدم درج مستقیم کوئری.
  4. استفاده از هوک‌های استاندارد.
  5. مستندسازی توابع و فایل‌ها.

راهنمای Pull Request در GitHub راهنمای حرفه‌ای و PHPCS برای استاندارد کد وردپرس نقطه شروع مناسبی هستند.

CODEOWNERS برای پروژه وردپرسی

# .github/CODEOWNERS
* @team-lead
/wp-content/themes/custom/ @theme-team
/wp-content/plugins/custom/ @plugin-team

استقرار با Git در وردپرس

استقرار با Git در وردپرس سه رویکرد دارد:

  1. Manual Deploy: Pull دستی روی سرور.
  2. CI/CD Deploy: استفاده از GitHub Actions.
  3. Deploy Scripts: اسکریپت‌های سفارشی.
# GitHub Actions برای Deploy
name: Deploy to Production
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /var/www/html/wp-content/themes/custom
            git pull origin main
            wp cache flush

راهنمای GitHub Actions راهنمای خودکارسازی گردش کار و Staging Environment و محیط آزمایش نقطه شروع مناسبی هستند.

محیط‌های GitHub

environment: production
environment: staging

این تنظیمات امکان تأیید دستی قبل از Deploy را فراهم می‌کند.

تست و پایش Git Workflow

تست Git Workflow در سه سطح انجام می‌شود: سطح Commit، سطح Branch و سطح Release.

# بررسی تاریخچه
git log --oneline --graph --all

# بررسی تغییرات
git diff main..feature/xyz

# بررسی وضعیت
git status

Pre-commit Hook برای پروژه وردپرسی

# .git/hooks/pre-commit
#!/bin/sh
vendor/bin/phpcs --standard=WordPress --extensions=php .
if [ $? -ne 0 ]; then
    echo "PHPCS failed. Commit aborted."
    exit 1
fi

اشتباهات رایج در تست

اشتباه اول، نبود تست .gitignore. اشتباه دوم، نبود تست Merge. اشتباه سوم، نبود تست Deploy. اشتباه چهارم، نبود تست Rollback. اشتباه پنجم، نبود تست با چند Branch همزمان.

پرسش‌های پرتکرار درباره Git در وردپرس

آیا کل وردپرس را در Git قرار دهم؟

توصیه می‌شود فقط قالب و افزونه اختصاصی را در Git قرار دهید و هسته وردپرس را با Composer مدیریت کنید.

چگونه فایل wp-config.php را مدیریت کنم؟

آن را در .gitignore قرار دهید و یک نسخه نمونه مثل wp-config-sample.php بسازید.

آیا Git با SVN افزونه‌های وردپرس کار می‌کند؟

بله، اما توصیه می‌شود Git را انتخاب کنید.

چگونه از انتشار ناخواسته جلوگیری کنم؟

از GitHub Environments و Approved Reviewers استفاده کنید.

آیا می‌توانم فایل‌های Upload را در Git نگه دارم؟

توصیه نمی‌شود. از Git LFS برای فایل‌های حجیم استفاده کنید.

آیا Git Workflow برای فریلنسر تک‌نفره ضروری است؟

بله، حتی برای یک نفر، امکان بازگشت و نسخه‌بندی ارزش بالایی دارد. راهنمای فریلنسری وردپرس را ببینید.

نتیجه و مسیر ادامه

Git ابزار اصلی مدیریت نسخه در پروژه‌های وردپرسی حرفه‌ای است. کلید موفقیت، .gitignore صحیح، استراتژی Branch مناسب، پیام‌های Commit استاندارد، Code Review و استقرار خودکار است. اگر این لایه‌ها با دقت طراحی شوند، تیم در طول سال‌ها هماهنگ و پایدار باقی می‌ماند.

پیشنهاد می‌کنم مسیر یادگیری را با Staging Environment و محیط آزمایش ادامه دهید و سپس آینده فروش آنلاین و فرصت‌های بین‌المللی را به‌عنوان رویکرد استراتژیک مطالعه کنید. همچنین مفهوم Git را در ویکی‌پدیا مرور کنید.

اگر روی پروژه واقعی خود Git Workflow پیاده کرده‌اید، برایم جالب است بدانید کدام بخش — Branch یا Code Review — بیشترین تأثیر را داشته است. تجربه خودتان را در دیدگاه‌ها بنویسید.