Appearance
Appearance
本页整理 Wireshark Wiki 中关于提交补丁的历史说明:从 GitLab fork、分支、提交、merge request,到审查、修正、冲突处理、回移植和从 Gerrit 迁移的注意事项。
| 项目 | 说明 |
|---|---|
| 用途 | 帮助贡献者理解原 Wiki 记录的 GitLab 补丁提交流程。 |
| 适用场景 | 准备提交 Wireshark 补丁、更新已有 merge request、测试他人的 merge request、处理发布分支回移植。 |
| 易混点 | 本页导入自 2020 年,原文也说明这些说明正从 Gerrit 时代更新到 GitLab。实际贡献时应以当前 Wireshark Developer's Guide 和 GitLab 页面为准。 |
Wireshark 已于 2020 年 8 月 23 日从 Gerrit 迁移到 GitLab。原文提示:如果在 Gerrit 中还有未完成更改,应阅读“从 Gerrit 迁移”部分。有关贡献代码的完整说明,应参阅《开发者指南》中的贡献部分。
| 阶段 | 动作 | 原文要点 |
|---|---|---|
| 准备账户 | 登录 GitLab,添加 SSH key。 | 可注册 GitLab,也可使用 GitHub、Google、Bitbucket 等账户登录。 |
| 创建个人副本 | 在 https://gitlab.com/wireshark/wireshark/ 点击 Fork。 | 生成个人 Wireshark 仓库副本。 |
| 克隆与 remote | 使用 upstream 指向官方仓库,downstream 指向个人仓库。 | 原文示例采用 upstream/downstream 命名,但 remote 名称可自定。 |
| 初始化开发环境 | 运行 tools/setup-dev.sh。 | 原文指出这是设置开发环境和 git hooks 的最简单方式。 |
| 新建分支 | 从 upstream/master 创建与更改相关的分支名。 | 分支名可与 bug 编号或 dissector 名称相关。 |
| 修改与测试 | 修改代码并测试。 | 补丁提交前应确认更改正常工作。 |
| 提交 | 使用 git add、git commit 或 git commit -a。 | 新文件仍需显式 git add。 |
| 推送 | 将当前分支推送到个人仓库。 | 原文使用 git push downstream HEAD。 |
| 创建 MR | 到 GitLab 创建 merge request。 | 保持允许维护者向源分支提交,以便 rebase 或调整。 |
| 审查与 CI | 在 MR 页面查看讨论、测试和状态。 | 创建 MR 后会运行一系列测试。 |
以下是原文工作流的精简版,USERNAME 和 BRANCH_NAME 需要替换为你的 GitLab 用户名和分支名。
git clone -o upstream git@gitlab.com:wireshark/wireshark.git
cd wireshark
git remote add downstream git@gitlab.com:USERNAME/wireshark.git
tools/setup-dev.sh
git checkout -b BRANCH_NAME upstream/master
# 修改并测试
git add FILE1 FILE2
git commit
git push downstream HEAD更新同一个 merge request 时,原文强调不要改分支名,因为 GitLab 用分支名关联已有 merge request。
git checkout BRANCH_NAME
# 修改并测试
git commit -a --amend
git push downstream +HEAD| 选项 | 用途 | 注意 |
|---|---|---|
| tools/setup-dev.sh | 设置开发环境,包括 git hooks。 | 原文推荐的最简单方式。 |
| Wireshark 自定义 pre-commit hook | 执行通用检查,以及 Wireshark 特定 API 和格式检查。 | 可能误报;可从 tools 目录复制 pre-commit 到 .git/hooks/。 |
| Git 示例 pre-commit hook | 检测混合制表符和空格等空白字符问题。 | 可复制或重命名 .git/hooks/pre-commit.sample。 |
| git commit --no-verify | 跳过 hooks。 | 仅在你确认更改有效且 hook 阻止提交时使用。 |
| 要素 | 原文要求 |
|---|---|
| 第一行 | 极简短描述,少于 60 个字符。 |
| 协议前缀 | 如果只针对单个协议,可用协议缩写加冒号开头。 |
| 草稿状态 | 未完成更改可在第一行前加 Draft:。 |
| 空行 | 第一行后插入空行。 |
| 详细描述 | 后续行说明更改细节,按需分段,每行限制为 80 个字符。 |
| issue 引用 | 可用 #1234 引用 issue;Closes #1234 在合并时关闭对应 issue。 |
| 示例捕获 | 如果为 dissector 贡献非平凡修复,原文建议打开 issue 并附示例捕获文件。 |
| AI 声明 | 原文希望声明是否使用 AI,例如 AI-Assisted: no 或 AI-Assisted: yes [tool(s)]。 |
示例按原文含义重排为可读格式:
MIPv6: Fix dissection of Service Selection Identifier
APN field is not encoded as a dotted string so the first character is not a
length. Closes #10323.
AI-Assisted: no| 场景 | 做法 |
|---|---|
| 更新 MR 内容 | 检出现有分支,继续修改和测试。 |
| 替换已有提交 | 使用 git commit --amend,再强制推送到同一分支。 |
| 追加提交 | 原文允许在当前更改上添加单独提交。 |
| 保持关联 | 不要更改分支名,GitLab 用分支名关联 MR。 |
| 不写补丁流水账 | 提交消息应描述整体意图,而不是记录每次追加补丁的演进。 |
| 步骤 | 操作 |
|---|---|
| 1 | 检出现有分支。 |
| 2 | 基于 Wireshark master 执行 rebase。原文中同时出现 git pull --rebase upstream master 与 git rebase upstream/master 的疑问,需按当前项目说明确认。 |
| 3 | 用 git status 找到 Unmerged paths 中的冲突文件。 |
| 4 | 在文件中搜索 <<<<<<<、=======、>>>>>>>,编辑为 rebase 后应有的最终内容。 |
| 5 | 保存后 git add 冲突文件。 |
| 6 | 运行 git rebase --continue,若继续出现冲突则重复处理。 |
| 7 | 完成后修正提交并推送到同一分支。 |
冲突提示示例来自原文:
CONFLICT (content): Merge conflict in ui/qt/main_window.ui
Auto-merging ui/qt/main_window.h
Failed to merge in the changes.| 任务 | 原文说明 |
|---|---|
| 删除本地分支 | 更改合并到官方 master 后,可删除本地分支。 |
| 删除远程分支 | 可从命令行删除个人 GitLab 仓库中的分支,也可在 GitLab Web UI 中删除。 |
| 测试他人 MR | fetch 对方个人仓库分支到本地,再从 FETCH_HEAD 创建本地分支。 |
| GitLab 辅助 | 每个 merge request 都有 “Check out branch” 按钮,包含类似说明。 |
git branch -d my-branch-name
git push -d downstream my-branch-name
git fetch https://gitlab.com/some-other-user/wireshark.git their-branch-name
git checkout -b other-user-branch-name FETCH_HEAD| 状态 | 原文做法 |
|---|---|
| 未提交 | 使用 git checkout -- FILES 还原指定文件;不带路径可撤销整个工作树。 |
| 已暂存但未提交 | 使用 git reset HEAD FILES 取消暂存,再还原文件。 |
| 已进入 master | 使用 git revert SHA 生成新的还原提交,并走正常审查流程。 |
| 情况 | 做法 |
|---|---|
| 可干净 cherry-pick | 在提交页面使用 GitLab 的 Cherry-pick 选项,选择发布分支,并保留创建新 merge request。 |
| 不能干净 cherry-pick | 基于 release-X.Y 创建分支,执行 cherry-pick,修复冲突,构建并测试,再推送并创建面向发布分支的 MR。 |
| 目标分支 | 创建 MR 时选择发布分支作为 Target branch。 |
| 维护者权限 | 保持允许有合并权限的成员向目标分支提交。 |
git checkout -b my-branch-name upstream/release-X.Y
git cherry-pick -x {commit}
# 修复冲突、构建、测试
git commit
git push downstream HEAD| 概念 | 原文解释 |
|---|---|
| commit | 每个提交由唯一 SHA 标识,并指向一个或多个父提交。 |
| 历史 | 提交形成一个有向无环图。 |
| tag | 从文本字符串到提交 SHA 的固定映射。 |
| branch | 从文本字符串到提交 SHA 的可变映射;新提交会推进分支。 |
| checkout | 可在工作分支、审查分支和 master 之间切换。 |
| 文件关注 | 原文称 GitLab 当时不提供跟踪特定文件变更的方法,并将其描述为常见请求。 |
| 主题 | 迁移说明 |
|---|---|
| 关联方式变化 | Gerrit 用提交消息中的 Change-Id 关联更改;GitLab 用个人仓库中的分支名关联 merge request。 |
| commit-msg hook | Gerrit 使用 commit-msg hook 强制 change ID;迁移到 GitLab 后原文建议移除 .git/hooks/commit-msg。 |
| remotes | 旧 remote 可能指向 ssh://code.wireshark.org/wireshark;原文示例改用 upstream 指向官方 GitLab 仓库,downstream 指向个人仓库。 |
| 未迁移内容 | 原文称 bug 已迁移为 issue,但 Gerrit changes 没有迁移为 GitLab merge request;且当时 Gerrit 系统已下线,无法再迁移。 |
| issue 链接 | 迁移前可用 Bug: 1234 或 Ping-Bug: 1234;GitLab issue 编号需用 # 前缀,可用 closes 自动关闭。 |
| CLI 工具 | 原文列出 lab、git-lab、gitlab-cli 等候选工具,并说明还需更多测试。 |
于 2020-08-11 23:13:08 UTC 从 https://wiki.wireshark.org/Development/SubmittingPatches 导入