meta-description: 使用Git进行WordPress版本控制完整教程,详解从开发到部署的完整工作流程。

keywords: WordPress Git,Git版本控制,自动部署,子模块,staging环境

# 使用Git进行WordPress版本控制

本文详细介绍如何使用Git管理WordPress代码,包括主题、插件开发和自动部署工作流。

## 为什么使用Git管理WordPress

| 优势 | 说明 |

|------|------|

| 版本追踪 | 追踪每次修改 |

| 团队协作 | 多人同时开发 |

| 快速回滚 | 出错立即恢复 |

| 自动部署 | push即部署 |

| 代码审查 | Pull Request流程 |

## 仓库结构设计

### 推荐结构


wordpress-site/
├── .git/
├── .gitignore
├── README.md
├── composer.json
├── wp-config-production.php
├── wp-config-staging.php
├── scripts/
│   ├── deploy.sh
│   └── backup.sh
└── wp-content/
    ├── themes/
    │   └── my-theme/        # 自建主题目录
    ├── plugins/
    │   └── my-plugin/       # 自建插件目录
    └── mu-plugins/
        └── site-specific.php

### .gitignore配置


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

# 配置文件(环境相关)
wp-config.php
wp-config-*.php

# 上传的文件
wp-content/uploads/
wp-content/upgrade/

# 缓存
wp-content/cache/
wp-content/object-cache.*/

# 日志
*.log
error_log

# 系统文件
.DS_Store
Thumbs.db

# IDE
.vscode/
.idea/
*.swp

## 子模块管理

### 使用Git Submodule管理插件


# 添加插件作为子模块
git submodule add https://github.com/plugin-author/plugin-repo.git wp-content/plugins/plugin-name

# 更新所有子模块
git submodule update --remote

# 克隆时初始化子模块
git clone --recurse-submodules 

### 私有主题开发


# 创建主题分支
git checkout -b feature/new-header

# 开发完成后合并
git checkout main
git merge feature/new-header

# 打标签发布版本
git tag -a v1.2.3 -m "Release v1.2.3"
git push origin v1.2.3

## 工作流设计

### 功能分支工作流


graph LR
    A[main分支] --> B[创建功能分支]
    B --> C[开发测试]
    C --> D[提交PR]
    D --> E[代码审查]
    E --> F{审查通过?}
    F -->|是| G[合并到main]
    F -->|否| C
    G --> H[自动部署到staging]
    H --> I[测试通过?]
    I -->|是| J[部署到生产]
    I -->|否| C

### 实际命令


# 1. 创建功能分支
git checkout -b feature/contact-form

# 2. 开发(编辑文件)
# 修改 wp-content/themes/my-theme/contact.php

# 3. 提交
git add wp-content/themes/my-theme/contact.php
git commit -m "feat: 添加联系表单功能"

# 4. 推送到远程
git push origin feature/contact-form

# 5. 在GitHub/GitLab创建PR
# 6. 审查通过后合并

## 自动部署配置

### 使用GitHub Actions


# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v3
      with:
        submodules: true
    
    - name: Deploy to Server
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /var/www/html/wp-content/themes/my-theme
          git pull origin main
          composer install --no-dev
          wp cache flush

### 使用Git Hook


# .git/hooks/post-receive(服务器端)
#!/bin/bash
TARGET="/var/www/html/wp-content/themes/my-theme"
GIT_DIR="/home/git/repo.git"
BRANCH="main"

while read oldrev newrev refname; do
    if [[ $refname = "refs/heads/$BRANCH" ]]; then
        echo "部署 $BRANCH 分支..."
        git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH
        cd $TARGET
        composer install --no-dev
        wp cache flush
        echo "部署完成!"
    fi
done

## 数据库版本控制

### 使用WP-CLI迁移数据库


# 导出数据库(排除临时数据)
wp db export - --tables=$(wp db tables --all --format=csv | grep -v '_transient') > dump.sql

# 在另一环境导入
wp db import dump.sql

# 搜索替换域名
wp search-replace 'https://dev.example.com' 'https://example.com' --skip-columns=guid

### 使用Migrate DB Pro

- 支持数据库同步

- 支持媒体文件同步

- 支持查找替换

## 多环境配置

### wp-config.php环境检测


// 检测环境
if (strpos($_SERVER['HTTP_HOST'], 'dev.') !== false) {
    define('WP_ENVIRONMENT_TYPE', 'development');
    require_once __DIR__ . '/wp-config-development.php';
} elseif (strpos($_SERVER['HTTP_HOST'], 'staging.') !== false) {
    define('WP_ENVIRONMENT_TYPE', 'staging');
    require_once __DIR__ . '/wp-config-staging.php';
} else {
    define('WP_ENVIRONMENT_TYPE', 'production');
    require_once __DIR__ . '/wp-config-production.php';
}

### 环境变量管理


# .env(不要提交到Git)
DB_NAME=wordpress
DB_USER=wp_user
DB_PASSworD=secret_password
WP_HOME=https://example.com
WP_SITEURL=https://example.com

// wp-config.php
$env = parse_ini_file(__DIR__ . '/.env');
define('DB_NAME', $env['DB_NAME']);
define('DB_USER', $env['DB_USER']);
define('DB_PASSworD', $env['DB_PASSworD']);

## 最佳实践

1. 不要提交敏感信息:API密钥、密码等使用环境变量

2. 使用.gitignore:排除上传文件、缓存等

3. 小步提交:每个功能独立提交

4. 写清楚的提交信息:使用约定式提交(Conventional Commits)

5. 使用PR模板:统一PR格式

## 常见操作


# 回滚到上一个版本
git reset --hard HEAD~1

# 恢复误删的文件
git checkout HEAD -- path/to/file

# 查看某次提交的改动
git show 

# 暂存当前修改
git stash
git stash pop

使用Git管理WordPress可以大幅提升开发效率和代码质量。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。