一、开源代码二次开发的背景问题
基于开源项目进行二次开发时,经常会遇到如下的代码冲突问题:
- 团队成员 使用开源代码进行二次开发。
- 开源代码维护人员更新了代码。
- 问题:团队成员的二次开发代码 和 开源代码维护人员的代码产生冲突。
二、分支管理流程图
分支用途与管理表
| 分支名称 | 类型 | 用途说明 | 更新频率 | 合并方向 |
|---|---|---|---|---|
| upstream/master | 远程分支 | 原始开源项目的主分支,作为代码来源 | 不定期 | 仅拉取,不推送 |
| origin/master | 远程分支 | 个人Fork仓库的主分支,用于备份 | 开发完成后 | 接收本地推送 |
| local/master | 本地分支 | 严格跟踪上游,保持与上游一致 | 上游更新时 | 从upstream拉取 |
| local/develop | 本地分支 | 集成测试分支,合并上游更新和功能开发 | 功能完成时 | 从master合并,接收feature合并 |
| local/feature-* | 本地分支 | 短期功能分支,每个新功能独立分支 | 功能开发期间 | 从develop创建,合并回develop |
| local/custom | 本地分支 | 长期自定义分支,包含所有二次开发修改 | 持续更新 | 从develop合并,可推送到origin |
三、详细git完整工作流程(可使用pycharm或idea替代)
1. 初始设置
# 1. Fork原始仓库到个人账户# 2. 克隆个人Fork仓库gitclone https://github.com/your-username/project.gitcdproject# 3. 添加上游远程仓库gitremoteaddupstream https://github.com/original-owner/project.git# 4. 创建本地分支gitcheckout -b master upstream/master# 跟踪上游gitcheckout -b develop# 开发分支gitcheckout -b custom# 自定义分支2. 日常开发流程
# 1. 从develop创建功能分支gitcheckout developgitpull origin developgitcheckout -b feature/new-feature# 2. 在feature分支开发# ... 编写代码,提交更改 ...gitadd.gitcommit -m"feat: 添加新功能"# 3. 完成功能后合并到developgitcheckout developgitmerge feature/new-featuregitbranch -d feature/new-feature# 4. 测试通过后合并到customgitcheckout customgitmerge develop3. 集成上游更新流程
# 1. 拉取上游最新代码到mastergitcheckout mastergitpull upstream master# 2. 将上游更新合并到developgitcheckout developgitmerge master# 或使用 git rebase master# 3. 解决可能的合并冲突# ... 手动解决冲突 ...gitadd.gitcommit -m"merge: 集成上游更新"# 4. 将更新同步到custom分支gitcheckout customgitmerge develop四、其他事项
| 实践要点 | 说明 |
|---|---|
| 定期同步 | 每周至少拉取(pull)一次上游更新,避免积压大量冲突 |
| 小步提交 | 频繁提交(Commit)小改动,便于追踪和回滚 |
| 分支清理 | 及时删除已合并的feature分支,保持仓库整洁 |
| 标签管理 | 为重要版本打标签(Tag):v1.0.0-custom |
| 自动化测试 | 每次合并前运行测试,确保集成质量 |