From 3c313dd515908eea3ad568fa92d261002a03fdec Mon Sep 17 00:00:00 2001 From: kale Date: Fri, 5 Dec 2025 02:54:23 -0500 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9python=E6=96=87=E4=BB=B61?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_example.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test_example.py b/test_example.py index a153660..eaf1380 100644 --- a/test_example.py +++ b/test_example.py @@ -6,4 +6,7 @@ def test_always_pass(): def test_drone_env(): import os print("test_drone_env") - assert 'DRONE' in os.environ # 验证是否在 Drone 环境中运行 \ No newline at end of file + assert 'DRONE' in os.environ # 验证是否在 Drone 环境中运行 + +def test_1(): + print("本地开发分支提交") \ No newline at end of file From 3789fd200c11354cc42261d5203a738156cd3536 Mon Sep 17 00:00:00 2001 From: kale Date: Fri, 5 Dec 2025 02:54:23 -0500 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9python=E6=96=87=E4=BB=B61?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test_example.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test_example.py b/test_example.py index a153660..eaf1380 100644 --- a/test_example.py +++ b/test_example.py @@ -6,4 +6,7 @@ def test_always_pass(): def test_drone_env(): import os print("test_drone_env") - assert 'DRONE' in os.environ # 验证是否在 Drone 环境中运行 \ No newline at end of file + assert 'DRONE' in os.environ # 验证是否在 Drone 环境中运行 + +def test_1(): + print("本地开发分支提交") \ No newline at end of file From 9bec764f506522da12041da23dbaee098108d1f8 Mon Sep 17 00:00:00 2001 From: kale Date: Fri, 5 Dec 2025 03:13:57 -0500 Subject: [PATCH 3/3] =?UTF-8?q?[fix]:[=E6=B7=BB=E5=8A=A0git=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E6=AD=A5=E9=AA=A4]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 191 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/README.md b/README.md index 836f905..f4d8d29 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,194 @@ # adsfasdfsadf +当然可以!以下是一份 **专为协作者(如你)量身定制的完整 Git + CI/CD 协作流程指南**,基于你的真实使用场景: + +- 🧑‍💻 你是 **协作者**(非仓库所有者) +- 💻 使用 **JetBrains IDEA** 开发 +- 📦 仓库托管在 **Gitea** +- ⚙️ CI/CD 由 **Drone** 驱动 +- 🔄 工作流:**功能分支 → PR → 审核 → 合并到 `main`** + +--- + +## 🎯 目标 + +让你从 **第一次参与项目** 到 **日常开发、提交 PR、同步代码** 全流程清晰、无歧义、零命令行。 + +--- + +## 🔄 完整协作流程(6 个清晰阶段) + +```mermaid +graph TD + A[0. 克隆项目] --> B[1. 同步最新 main] + B --> C[2. 创建功能分支] + C --> D[3. 日常开发与提交] + D --> E[4. 提交前同步 main] + E --> F[5. 推送并创建 PR] + F --> G[6. 等待审核 & 合并] +``` + +--- + +### ✅ 阶段 0:克隆项目(首次参与) + +> 只需做一次 + +1. 打开 IDEA → **Get from VCS** + - URL: `https://gitea.hy-ec.cn/jk_yinzy/adfsadfsadf.git` + - Directory: 本地路径(如 `~/projects/my-project`) +2. 点击 **Clone** +3. 登录你的 Gitea 账号(需有 **读写权限**) + +✅ 此时你拥有完整本地仓库,包含 `main` 分支。 + +--- + +### ✅ 阶段 1:同步最新 `main`(重要!) + +> 确保你基于最新代码开始开发 + +1. 右下角点击分支名(应为 `main`) +2. 菜单栏:**VCS → Git → Fetch** + (拉取远程所有更新,包括 `origin/main`) +3. 确认本地 `main` 是最新的(可选:切换到 `main` → 查看提交历史) + +> 💡 这一步防止你基于过时代码开发! + +--- + +### ✅ 阶段 2:创建你的功能分支 + +1. 右下角点击当前分支(`main`) +2. 选择 **New Branch** + - 名称规范:`feat/xxx`、`fix/xxx`、`yourname/topic` + 例如:`yinzy/user-profile` +3. IDEA 自动切换到新分支 + +✅ 此分支仅属于你,可自由提交。 + +--- + +### ✅ 阶段 3:日常开发与提交 + +1. 编写代码、修改文件 +2. 底部 **Git → Commit** + - 勾选变更文件 + - 输入语义化提交信息: + ``` + feat: add user profile page + ``` +3. 点击 **Commit and Push** + +> ⚠️ 首次推送时: +> - IDEA 会弹窗 → 勾选 **Set upstream** +> - 远程分支自动创建(如 `origin/yinzy/user-profile`) + +✅ 之后每次提交可直接 **Push**(无需再设 upstream) + +--- + +### ✅ 阶段 4:提交 PR 前 —— 再次同步 `main` + +> ⚠️ 关键步骤!避免 PR 出现冲突 + +即使你刚开发完,也可能有人已合并新代码到 `main`。 + +#### 操作步骤(全部在 IDEA): + +1. **VCS → Git → Fetch** + (获取最新 `origin/main`) +2. **VCS → Git → Rebase...** + - Onto branch: `origin/main` + - 点击 **Rebase** +3. 如果出现冲突: + - IDEA 弹出 **Merge Conflicts** 窗口 + - 双击文件,在三向编辑器中解决 + - 点击 **Apply** → 继续 +4. **VCS → Git → Push** + - 如果提示 “Push failed”,点击 **Force Push** + +> ✅ 现在你的分支干净地基于最新 `main` + +--- + +### ✅ 阶段 5:推送并创建 Pull Request(PR) + +1. 确保代码已推送(右上角无未推送提交) +2. IDEA 可能弹出提示: + > “Your branch has been pushed. Create a pull request?” +3. 点击 **Create Pull Request** + - 或手动打开 Gitea 页面 +4. 在 Gitea 中填写: + - **标题**:`feat: add user profile` + - **描述**:功能说明、如何测试 + - **不要加 `WIP:`**(除非未完成) +5. 点击 **Create Pull Request** + +✅ Drone 自动运行 CI(`drone/pr`) + +--- + +### ✅ 阶段 6:等待审核 & 合并 + +1. 维护者(`jk_yinzy`)会: + - 查看 CI 结果(必须绿色 ✅) + - 审核代码 + - 点击 **Approve** + - 点击 **「创建合并提交」**(Squash and merge) +2. 合并后,PR 自动关闭 +3. (可选)维护者删除你的远程分支 + +> 🎉 你的代码正式进入 `main`! + +--- + +## 🔁 日常开发循环(每天重复) + +当你继续开发新功能时,只需重复: + +```mermaid +graph LR + A[Fetch latest main] --> B[Create new branch] + B --> C[Develop + Commit] + C --> D[Rebase onto main] + D --> E[Push + Create PR] +``` + +> 💡 每次提 PR 前都执行 **阶段 4(rebase)**,这是专业协作的核心习惯! + +--- + +## 🛠️ IDEA 快捷操作速查 + +| 操作 | 路径 | +|------|------| +| 拉取远程更新 | **VCS → Git → Fetch** | +| 创建分支 | 右下角 → New Branch | +| 变基到 main | **VCS → Git → Rebase... → origin/main** | +| 强制推送 | **Push → Force Push** | +| 查看提交历史 | **Git → Log** | + +--- + +## 📌 重要提醒 + +| 注意事项 | 说明 | +|--------|------| +| ❌ 不要直接推送到 `main` | 分支保护会拒绝 | +| ✅ 每次 PR 前必须 rebase | 避免“此分支落后于 main” | +| ✅ 提交信息要清晰 | 便于审核和追溯 | +| ✅ 小步提交、频繁推送 | 降低冲突风险 | + +--- + +## ✅ 最终效果 + +- 你作为协作者:**独立开发、安全提交、顺利合入** +- 维护者:**轻松审核、一键合并、历史干净** +- 项目:**CI 始终通过、`main` 永远可部署** + +--- + +如果你希望,我可以将这份指南导出为 **PDF 手册** 或 **团队协作备忘单(Markdown / Word)**,方便你和队友随时查阅!是否需要? ## 添加git cicd \ No newline at end of file