开发一个项目时,并不是所有事情都能直接从代码看出来。你可能需要记录一个 Bug、计划一个新功能,或者提醒团队以后处理某个问题。
GitHub 提供的 Issue 就是用来做这些事情的。
可以把 Issue 简单理解成项目中的一张“任务卡”或者“问题记录”。
例如,一个项目中可能有这些 Issues:
Login button does not work on mobile
Add dark mode
Improve search speed
Update installation documentationIssue 本身不是代码,它只是用来描述:
项目中有一件事情需要处理。
Issue 可以用来做什么?
最常见的用途包括记录 Bug、功能需求和开发任务。
例如发现一个 Bug:
Title:
Login button does not work on mobileIssue 描述中可以进一步写:
The login button cannot be clicked on small screens.
Steps to reproduce:
1. Open the login page on a phone
2. Enter email and password
3. Tap the login button
Expected:
The user should be logged in.
Actual:
Nothing happens.这样其他开发者即使没有亲自遇到这个问题,也可以理解 Bug 是怎么出现的。
Issue 也可以用来记录新功能:
Add dark mode或者一个简单任务:
Update README installation steps创建 Issue
进入 GitHub Repository 后,可以打开 Issues 页面并创建一个新的 Issue。
通常最重要的是标题和描述。
标题应该尽量简洁,例如:
Fix broken login button on mobile而不是:
There is a problem描述中则可以补充问题出现的环境、复现步骤或者预期结果。
一个 Issue 不需要写得非常复杂,只要其他人能够理解“要解决什么问题”就已经很有价值。
Assign 是什么?
Issue 可以指定负责人,这个操作通常叫 Assign。
例如:
Issue: Fix login button
Assignee: Alice表示 Alice 负责处理这个 Issue。
在小型个人项目中,Assignee 可能没有那么重要,但在团队中,它可以帮助大家快速知道某个任务目前由谁负责。
Label 是什么?
Issue 还可以添加 标签(Label)。
常见的 Label 例如:
bug
feature
documentation
help wanted这样可以快速区分不同类型的任务。
例如:
Fix login button
Label: bug和:
Add dark mode
Label: feature当项目的 Issue 很多时,Label 可以帮助筛选和管理任务。
从 Issue 开始开发
一个比较自然的团队流程是先有 Issue,再根据 Issue 创建 Branch。
例如 Issue 是:
#25 Add dark mode开发者可能创建 Branch:
feature/dark-mode然后开始开发:
git switch main
git pull
git switch -c feature/dark-mode完成后 Commit 并 Push:
git add .
git commit -m "Add dark mode"
git push -u origin feature/dark-mode最后创建 Pull Request。
这样,一个开发任务就有了完整的路径:
Issue → Branch → Commit → Pull Request → Merge
在 Pull Request 中关联 Issue
Pull Request 可以关联对应的 Issue。
例如 PR 描述中可以写:
Closes #25其中:
#25代表编号为 25 的 Issue。
当这个 PR Merge 后,GitHub 可以自动关闭对应的 Issue。
类似的写法还包括:
Fixes #25或者:
Resolves #25这样就可以把“为什么要修改代码”和“具体修改了什么代码”连接起来。
知识测验
为什么 Issue 很有用?
假设团队成员突然说:
登录页面好像有问题,有空修一下。如果只是在聊天软件里提到,几天以后很容易忘记。
如果创建一个 Issue:
#31 Login page fails on Safari那么这个问题就会一直保留在项目中,直到有人处理并关闭它。
因此 Issue 不只是“报 Bug 的地方”,它也可以看作项目开发工作的记录系统。
练习
为“点击个人资料页的保存按钮后没有任何反应”编写一个完整 Issue。必须包含标题、复现步骤、期望结果、实际结果,并选择一个合适的 Label。