基本操作 Clone & Fork
这两者都涉及“获取代码”,但目的完全不同
| 操作 | 物理本质 | 逻辑归属 | 适用场景 |
|---|---|---|---|
| Fork | 在 GitHub 云端 复制一份他人的仓库到你自己的名下。 | 代码现在属于你的账号,你可以随意修改且不影响原作。 | 给开源项目提修改建议,或基于他人模型二次开发。 |
| Clone | 将远程仓库(Remote)下载到本地电脑。 | 代码依然属于原作者 | 自己的项目,或者已被加入协作者名单的项目。 |
- 你在 GitHub 网页点 Fork
- 你
git clone你自己 Fork 出来的仓库到本地 - 修改后
git push回你自己的仓库 - 发起 Pull Request (PR) 请求原作者合并
任务管理:Issue
Issue 可以是反馈 Bug 的地方,也可以是一个项目看板
- 用法:记录待办事项 (TODO)、功能需求 (Feature Request) 或学术讨论
- 关联性:每个 Issue 都有一个编号(如
#12)。在 Commit message 里写fix: resolve issue #12,GitHub 会自动建立链接 - Label:利用标签(如
bug、enhancement、help wanted)来分类任务。对于科研项目,可以设置experiment或data-collection标签
Basics
- 标题 (Title):简洁明了的任务说明
- 正文 (Description):支持 Markdown 语法
- 指派人 (Assignees):这任务归谁干,在实验室项目里,学可能会把一个任务“指派”给你
- 标签 (Labels):给任务分类。常见的有
bug(程序错误)、enhancement(功能增强)、help wanted(求助) - 里程碑 (Milestones):关联到一个具体的时间点。可以把所有相关 Issue 都挂在这个里程碑下
联动 (Linking)
#
GitHub 为每个 Issue 分配了一个唯一的编号(如 #1)
- 在讨论中提到
#1,它会自动变成一个超链接 - 在 Commit 信息里写
refactor: improve smpl rendering, fixes #1 - 当你把代码合并到主分支时,GitHub 会检测到
fixes #1关键字,并自动帮你关掉(Close)那个 Issue
提及与引用 (@mentions)
就像微信里的 @ 一样,你在 Issue 里 @某个账号,他就会收到通知。所有的讨论都留在了代码仓库里,方便日后回溯
使用场景
一:科研笔记与任务追踪
例如在你的 Research 仓库开一个 Issue:
- 标题:
[Feature] 实现 SMPL-X 模型的批量渲染脚本 - 正文:列出任务清单(Task List):
- [x] 配置环境
- [ ] 编写核心循环
- [ ] 导出为 .mp4
- 作用:学长看到后,不需要问你进度,看一眼 Issue 里的勾选情况就知道了
场景二:博客灵感库
在你的 Blog_Source 仓库里开 Issue:
- 标题:
[Idea] 写一篇关于 UIUC 交换申请的心得 - 正文:随便写点大纲或想到的关键词
- 作用:这相当于一个云端待办清单,而且支持版本回溯
Issue 模板 (Issue Templates)
如果点击 “New Issue” 后会弹出几个选项。这就是模板。它强迫你按照固定的格式填信息(比如:你用的 Python 版本、报错截图、复现步骤)。这能极大提高沟通效率
Workflow
- Open:发现问题或产生新想法,创建一个 Issue
- Discuss:在下方留言、上传截图、@相关人员讨论方案
- Link:创建一个分支去解决它,并在提交代码时引用该 Issue 编号
- Close:问题解决了,手动或通过代码合并自动关闭
协作:Pull Request (PR)
PR 是“请求对方拉取你的代码”
- Code Review (代码评审):在 PR 界面,队友可以在你改动的那一行代码下直接留言讨论
- Draft PR:如果你还没写完,但想让导师看看思路,可以创建一个 Draft PR,它不会被意外合并
- Merge 策略:
- Create a merge commit:保留所有琐碎的提交历史
- Squash and merge:把你的 10 个琐碎提交压缩成 1 个,保持主线整洁
自动化:GitHub Actions
这是 GitHub 自带的虚拟机(Runner),可以根据触发条件(如 push)自动跑代码
- Workflow (.yml):存放在
.github/workflows/目录下 - 应用例子:博客自动化,配置了 Actions,你可以直接在 Obsidian 里写完并推送到 GitHub,GitHub 的服务器会自动帮你运行
hexo g -d,不需要占用你本地电脑的资源 - 科研应用:每次推送代码时自动运行
pytest测试你的 SMPL 渲染逻辑是否被改坏了
GitHub 协作全流程
假设你要为一个开源的机器人控制库贡献代码:
- Fork 对方的仓库到你的账号
- Clone 你的仓库到本地
- Checkout 建立一个新的分支(如
feat-fix-ik) - Commit 你的修改
- Push 到你自己的远程分支
- 在 GitHub 网页点击 Compare & pull request
- 原作者 Review 你的代码并提出修改意见
- 原作者点击 Merge,你的代码正式进入了原作的
main分支