6.7 版本管理:AI原生开发中的版本控制策略(Git工作流优化)

引言

版本管理是AI原生开发的重要环节。本文介绍Git工作流优化策略。

Git工作流

1. 规范文档版本控制

# 规范文档单独分支
git checkout -b spec/user-registration
# 修改spec.md
git commit -m "Add user registration spec"

2. 代码生成分支

# 从规范生成代码
git checkout -b feature/user-registration
claude-code generate --spec spec.md
git commit -m "Generate user registration code"

3. 合并策略

# 合并规范到主分支
git checkout main
git merge spec/user-registration

# 合并代码到主分支
git merge feature/user-registration

总结

Git工作流优化:

规范分支:规范文档单独管理
代码分支:代码生成独立分支
合并策略:清晰的合并流程


思考题

  1. 如何管理规范文档版本?
  2. 如何协调规范和代码?
  3. 如何优化Git工作流?

实践作业
优化你的Git工作流。

3种Git工作流模式

模式1:规范驱动工作流

工作流设计

规范分支

规范审查

合并到main

代码生成分支

代码审查

合并到main

实现
# spec_driven_workflow.py
import subprocess
from pathlib import Path

class SpecDrivenWorkflow:
    """规范驱动工作流。"""
    
    def create_spec_branch(self, feature_name: str) -> str:
        """创建规范分支。"""
        branch_name = f"spec/{feature_name}"
        subprocess.run(['git', 'checkout', '-b', branch_name])
        return branch_name
    
    def commit_spec(self, spec_path: Path, message: str):
        """提交规范。"""
        subprocess.run(['git', 'add', str(spec_path)])
        subprocess.run(['git', 'commit', '-m', message])
    
    def create_code_branch(self, spec_branch: str) -> str:
        """从规范分支创建代码分支。"""
        code_branch = spec_branch.replace('spec/', 'feature/')
        subprocess.run(['git', 'checkout', '-b', code_branch, spec_branch])
        return code_branch
    
    def generate_and_commit_code(self, spec_path: Path):
        """生成并提交代码。"""
        # 生成代码
        subprocess.run(['claude-code', 'generate', '--spec', str(spec_path)])
        
        # 提交代码
        subprocess.run(['git', 'add', '.'])
        subprocess.run(['git', 'commit', '-m', 'Generate code from spec'])

模式2:功能分支工作流

工作流设计

功能分支

开发

测试

审查

合并到develop

发布分支

合并到main

实现
# feature_branch_workflow.py
class FeatureBranchWorkflow:
    """功能分支工作流。"""
    
    def create_feature_branch(self, feature_name: str) -> str:
        """创建功能分支。"""
        branch_name = f"feature/{feature_name}"
        subprocess.run(['git', 'checkout', 'develop'])
        subprocess.run(['git', 'pull'])
        subprocess.run(['git', 'checkout', '-b', branch_name])
        return branch_name
    
    def finish_feature(self, branch_name: str):
        """完成功能。"""
        # 合并到develop
        subprocess.run(['git', 'checkout', 'develop'])
        subprocess.run(['git', 'merge', '--no-ff', branch_name])
        subprocess.run(['git', 'branch', '-d', branch_name])
    
    def create_release_branch(self, version: str) -> str:
        """创建发布分支。"""
        branch_name = f"release/{version}"
        subprocess.run(['git', 'checkout', 'develop'])
        subprocess.run(['git', 'checkout', '-b', branch_name])
        return branch_name

模式3:GitFlow工作流

工作流设计

main

develop

feature分支

release分支

hotfix分支

实现
# gitflow_workflow.py
class GitFlowWorkflow:
    """GitFlow工作流。"""
    
    def __init__(self):
        self.main_branch = 'main'
        self.develop_branch = 'develop'
    
    def init_gitflow(self):
        """初始化GitFlow。"""
        # 创建develop分支
        subprocess.run(['git', 'checkout', '-b', self.develop_branch])
        subprocess.run(['git', 'push', '-u', 'origin', self.develop_branch])
    
    def start_feature(self, feature_name: str) -> str:
        """开始功能开发。"""
        branch_name = f"feature/{feature_name}"
        subprocess.run(['git', 'checkout', self.develop_branch])
        subprocess.run(['git', 'checkout', '-b', branch_name])
        return branch_name
    
    def finish_feature(self, branch_name: str):
        """完成功能。"""
        subprocess.run(['git', 'checkout', self.develop_branch])
        subprocess.run(['git', 'merge', '--no-ff', branch_name])
        subprocess.run(['git', 'branch', '-d', branch_name])
        subprocess.run(['git', 'push', 'origin', self.develop_branch])
    
    def start_release(self, version: str) -> str:
        """开始发布。"""
        branch_name = f"release/{version}"
        subprocess.run(['git', 'checkout', self.develop_branch])
        subprocess.run(['git', 'checkout', '-b', branch_name])
        return branch_name
    
    def finish_release(self, branch_name: str, version: str):
        """完成发布。"""
        # 合并到main
        subprocess.run(['git', 'checkout', self.main_branch])
        subprocess.run(['git', 'merge', '--no-ff', branch_name])
        subprocess.run(['git', 'tag', '-a', version, '-m', f'Release {version}'])
        
        # 合并回develop
        subprocess.run(['git', 'checkout', self.develop_branch])
        subprocess.run(['git', 'merge', '--no-ff', branch_name])
        
        # 删除分支
        subprocess.run(['git', 'branch', '-d', branch_name])
        
        # 推送
        subprocess.run(['git', 'push', 'origin', self.main_branch])
        subprocess.run(['git', 'push', 'origin', self.develop_branch])
        subprocess.run(['git', 'push', 'origin', version])
    
    def start_hotfix(self, version: str) -> str:
        """开始热修复。"""
        branch_name = f"hotfix/{version}"
        subprocess.run(['git', 'checkout', self.main_branch])
        subprocess.run(['git', 'checkout', '-b', branch_name])
        return branch_name
    
    def finish_hotfix(self, branch_name: str, version: str):
        """完成热修复。"""
        # 合并到main
        subprocess.run(['git', 'checkout', self.main_branch])
        subprocess.run(['git', 'merge', '--no-ff', branch_name])
        subprocess.run(['git', 'tag', '-a', version, '-m', f'Hotfix {version}'])
        
        # 合并到develop
        subprocess.run(['git', 'checkout', self.develop_branch])
        subprocess.run(['git', 'merge', '--no-ff', branch_name])
        
        # 删除分支
        subprocess.run(['git', 'branch', '-d', branch_name])
        
        # 推送
        subprocess.run(['git', 'push', 'origin', self.main_branch])
        subprocess.run(['git', 'push', 'origin', self.develop_branch])
        subprocess.run(['git', 'push', 'origin', version])

Git Hooks集成

Pre-commit Hook

# pre_commit_hook.py
#!/usr/bin/env python3
import subprocess
import sys

def run_pre_commit_checks():
    """运行提交前检查。"""
    checks = [
        ('代码格式化', ['black', '--check', '.']),
        ('代码风格', ['flake8', '.']),
        ('类型检查', ['mypy', '.']),
        ('测试', ['pytest', 'tests/']),
    ]
    
    failed_checks = []
    
    for check_name, command in checks:
        result = subprocess.run(command, capture_output=True)
        if result.returncode != 0:
            failed_checks.append(check_name)
            print(f"❌ {check_name} 失败")
            print(result.stderr.decode())
        else:
            print(f"✅ {check_name} 通过")
    
    if failed_checks:
        print(f"\n提交被阻止,以下检查失败: {', '.join(failed_checks)}")
        sys.exit(1)
    else:
        print("\n✅ 所有检查通过,可以提交")
        sys.exit(0)

if __name__ == '__main__':
    run_pre_commit_checks()

总结

3种Git工作流模式:

模式1:规范驱动工作流:规范和代码分离管理
模式2:功能分支工作流:适合持续集成
模式3:GitFlow工作流:适合大型项目

最重要的是:选择合适的Git工作流模式,可以优化团队协作,提升开发效率。

现在就开始优化你的Git工作流,体验高效的团队协作吧!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐