跳到主要内容

拉取请求与讨论

Hub 的拉取请求与讨论功能允许用户向仓库进行社区贡献。它们在所有仓库类型中工作方式一致。

总体而言,其目标是构建一个比其他 Git 托管平台(如 GitHub)的 PR 与 Issues 更简洁的版本:

  • 不涉及 fork:贡献者直接向源仓库的特殊 ref 分支推送。
  • 讨论与 PR 没有硬性区分:二者本质相同,因此显示在同一列表中。
  • 针对机器学习场景进行了简化(即模型/数据集/Spaces 仓库),而非任意仓库。

注意,可在仓库设置中启用或禁用拉取请求与讨论功能。

列表

进入任一仓库的 community 标签页,即可看到所有讨论与拉取请求。你也可以筛选仅查看打开状态的条目。

discussions listdiscussions list

查看

在讨论页面,你可以看到不同用户的评论。如果是拉取请求,可通过 “Files changed” 标签查看全部变更。

discussions viewdiscussions view

编辑讨论 / 拉取请求标题

如果是你发起的 PR 或讨论,或你是仓库作者(拥有写入权限),可点击铅笔按钮编辑标题。

discussions edit titlediscussions edit title

置顶讨论 / 拉取请求

若你拥有仓库写入权限,可将讨论与拉取请求置顶。置顶后的讨论会显示在列表顶部。

discussions pindiscussions pin
discussions pinneddiscussions pinned

锁定讨论 / 拉取请求

拥有写入权限的用户还可以锁定讨论或拉取请求。锁定后,已有评论仍可见,但用户无法再添加新评论。

discussions lockdiscussions lock
discussions lockeddiscussions locked

评论编辑与管理

如果你撰写了评论或拥有仓库写入权限,可在评论框右上角的上下文菜单中编辑评论内容。

discussions comment menudiscussions comment menu
discussions comment menu editdiscussions comment menu edit

评论被编辑后,评论上方会出现一个新链接,用于查看编辑历史。

discussions comment edit linkdiscussions comment edit link
discussions comment edit historydiscussions comment edit history

你也可以隐藏评论。隐藏操作不可逆,之后无人能够查看或编辑该评论内容。

discussions comment hiddendiscussions comment hidden

更多举报违规评论的方式,请参阅内容审核

评论与讨论支持 Markdown 和 LaTeX 吗?

当然!你可以使用 Markdown 为评论添加格式。还可以使用 LaTeX 输入数学公式,系统会在 Markdown 解析前通过 KaTeX 渲染。

书写 LaTeX 方程需使用以下定界符:

  • $$ ... $$:显示模式
  • \(...\):行内模式(斜杠与括号之间不留空格)

如何在本地管理拉取请求?

假设你的 PR 编号为 42。

git fetch origin refs/pr/42:pr/42
git checkout pr/42
# 修改内容
git add .
git commit -m "Add your change"
git push origin pr/42:refs/pr/42

草稿模式

在 “Advanced mode” 中从零创建新 PR 时,默认状态为草稿。该状态下,协作者知道你的 PR 仍在进行中,无法合并。分支准备就绪后,点击 “Publish” 按钮将状态改为 “Open”。注意,一旦发布就无法回到草稿模式。

拉取请求高级用法

更改存储在 Git 仓库的哪个位置?

我们的 PR 不使用 fork 与常规分支,而是采用存放于源仓库中的自定义 “分支” —— refs

Git 引用(Git References) 是 Git 内部存储标签与分支的机制。

使用自定义 refs(如 refs/pr/42)而非分支的好处在于:默认情况下克隆仓库的人(包括仓库所有者)不会自动抓取这些 refs,但可按需获取。

抓取所有拉取请求:献给 Git 高手们 🧙‍♀️

你可以调整本地 refspec 以抓取所有 PR:

  1. 抓取
git fetch origin refs/pr/*:refs/remotes/origin/pr/*
  1. 创建跟踪该 ref 的本地分支
git checkout pr/{PR_NUMBER}
# 例如:git checkout pr/42
  1. 如果进行了本地修改,推送到 PR ref:
git push origin pr/{PR_NUMBER}:refs/pr/{PR_NUMBER}
# 例如:git push origin pr/42:refs/pr/42