|
| 1 | +# **完整 Fork 维护与定制开发流程总结** |
| 2 | + |
| 3 | +## **1. 初始设置(仅需一次)** |
| 4 | +```bash |
| 5 | +# 克隆你的 Fork |
| 6 | +git clone https://github.com/deepinnet/vllm.git |
| 7 | +cd dify |
| 8 | + |
| 9 | +# 添加原仓库为 upstream |
| 10 | +git remote add upstream https://github.com/vllm-project/vllm.git |
| 11 | + |
| 12 | +# 检查远程仓库 |
| 13 | +git remote -v |
| 14 | +# 应显示: |
| 15 | +# origin https://github.com/vllm-project/vllm.git (fetch & push) |
| 16 | +# upstream https://github.com/vllm-project/vllm.git (fetch & push) |
| 17 | +``` |
| 18 | + |
| 19 | +## **2. 推荐分支策略** |
| 20 | +| 分支 | 用途 | |
| 21 | +|------|------| |
| 22 | +| `main` | 仅用于同步上游代码,保持干净 | |
| 23 | +| `custom-dev` | 你的**长期开发分支**,所有定制在此进行 | |
| 24 | +| `feature/xxx` (可选) | 短期功能分支,完成后合并回 `custom-dev` | |
| 25 | + |
| 26 | +```bash |
| 27 | +# 创建你的开发分支 |
| 28 | +git checkout -b custom-dev |
| 29 | +``` |
| 30 | + |
| 31 | +--- |
| 32 | + |
| 33 | +## **3. 日常开发流程** |
| 34 | +### **① 在 `custom-dev` 分支开发** |
| 35 | +```bash |
| 36 | +git checkout custom-dev |
| 37 | + |
| 38 | +# 进行修改并提交 |
| 39 | +git add . |
| 40 | +git commit -m "feat: 我的定制功能" |
| 41 | +git push origin custom-dev |
| 42 | +``` |
| 43 | + |
| 44 | +### **② 定期同步上游更新,或者官方发布重大版本升级,重要Bug修复等情况下** |
| 45 | +```bash |
| 46 | +# 1. 切换到 main 分支 |
| 47 | +git checkout main |
| 48 | + |
| 49 | +# 2. 拉取上游最新代码(不自动合并) |
| 50 | +git fetch upstream |
| 51 | + |
| 52 | +# 3. 合并上游更新到你的 main 分支 |
| 53 | +git merge upstream/main |
| 54 | + |
| 55 | +# 4. 推送更新到你的 Fork(可选) |
| 56 | +git push origin main |
| 57 | + |
| 58 | +# 5. 切换回开发分支 |
| 59 | +git checkout custom-dev |
| 60 | + |
| 61 | +# 6. 合并上游更新到你的开发分支 |
| 62 | +git merge main |
| 63 | +# 或使用 rebase(更整洁,但需处理冲突) |
| 64 | +# git rebase main |
| 65 | + |
| 66 | +# 7. 解决冲突(如果有)并推送 |
| 67 | +git push origin custom-dev |
| 68 | +``` |
| 69 | + |
| 70 | +--- |
| 71 | + |
| 72 | +## **4. 冲突处理技巧** |
| 73 | +- **查看冲突文件**: |
| 74 | + ```bash |
| 75 | + git status |
| 76 | + ``` |
| 77 | +- **手动编辑冲突文件**(搜索 `<<<<<<<`, `=======`, `>>>>>>>`) |
| 78 | +- **标记冲突已解决**: |
| 79 | + ```bash |
| 80 | + git add <冲突文件> |
| 81 | + ``` |
| 82 | +- **继续合并/变基**: |
| 83 | + ```bash |
| 84 | + git commit # 如果是 merge |
| 85 | + git rebase --continue # 如果是 rebase |
| 86 | + ``` |
| 87 | + |
| 88 | +--- |
| 89 | + |
| 90 | +## **5. 高级维护技巧** |
| 91 | +### **① 仅合并特定提交(cherry-pick)** |
| 92 | +```bash |
| 93 | +git cherry-pick <commit-hash> |
| 94 | +``` |
| 95 | + |
| 96 | +### **② 清理提交历史(交互式 rebase)** |
| 97 | +```bash |
| 98 | +git rebase -i main |
| 99 | +``` |
| 100 | + |
| 101 | +### **③ 强制同步 main 分支(丢弃本地修改)** |
| 102 | +```bash |
| 103 | +git checkout main |
| 104 | +git reset --hard upstream/main |
| 105 | +git push origin main --force |
| 106 | +``` |
| 107 | + |
| 108 | +--- |
| 109 | + |
| 110 | +## **6. 最佳实践** |
| 111 | +✅ **定期同步上游**(建议每周一次) |
| 112 | +✅ **模块化修改**,避免直接改核心文件 |
| 113 | +✅ **提交信息清晰**,方便追踪 |
| 114 | +✅ **维护 `CHANGES.md` 记录定制内容** |
| 115 | +❌ **避免直接在 `main` 分支开发** |
| 116 | + |
| 117 | +--- |
| 118 | + |
| 119 | +这样,你可以: |
| 120 | +- **持续获取上游更新**(新功能/安全修复) |
| 121 | +- **安全保留定制代码** |
| 122 | +- **减少合并冲突风险** |
| 123 | + |
| 124 | + |
| 125 | +将你的 `custom-dev` 分支修改同步回 `main` 分支的时机和方式需要谨慎处理,以下是专业建议: |
| 126 | + |
| 127 | +--- |
| 128 | + |
| 129 | +### 🕰 **何时同步回 main 分支?** |
| 130 | +1. **准备发布生产环境时** |
| 131 | + - 当定制功能开发完成并通过测试后 |
| 132 | + - 示例流程: |
| 133 | + ```bash |
| 134 | + # 1. 确保 main 已更新到最新上游代码 |
| 135 | + git checkout main |
| 136 | + git fetch upstream |
| 137 | + git merge upstream/main |
| 138 | + |
| 139 | + # 2. 合并定制功能到 main |
| 140 | + git merge --no-ff custom-dev # 显式生成合并提交 |
| 141 | + git push origin main |
| 142 | + |
| 143 | + # 3. 打标签并部署 |
| 144 | + git tag -a v1.0-custom -m "包含定制功能的生产版本" |
| 145 | + git push origin --tags |
| 146 | + ``` |
| 147 | + |
| 148 | +--- |
| 149 | + |
| 150 | +**黄金准则**: |
| 151 | +> 保持 `main` 分支随时可发布,合并 `custom-dev` 前必须: |
| 152 | +> 1. 测试通过 |
| 153 | +> 2. 文档更新 |
| 154 | +> 3. 创建回滚点(如 tag) |
0 commit comments