拉取请求和讨论
Hub 拉取请求和讨论允许用户对存储库进行社区贡献。拉取请求和讨论对所有存储库类型的工作方式相同。
从高级别上讲,目标是构建其他 Git 托管(如 GitHub 的 PR 和 Issues)的简化版本。
- 不涉及分支:贡献者直接推送到源存储库上的特殊
ref
分支。 - 讨论和 PR 之间没有严格的区分:它们本质上是相同的,因此在相同的列表中显示。
- 它们针对 ML(即模型/数据集/空间存储库)进行优化,而不是任意存储库。
请注意,拉取请求和讨论可以在 存储库设置 中启用或禁用。
列表
在任何存储库的社区选项卡中,您可以看到所有讨论和拉取请求。您也可以过滤以仅查看打开的请求。


查看
讨论页面允许您查看来自不同用户的评论。如果是拉取请求,您可以在“更改的文件”选项卡中查看所有更改。


编辑讨论/拉取请求标题
如果您打开了一个 PR 或讨论,是存储库的作者,或者对存储库具有写权限,您可以在单击铅笔按钮后编辑讨论标题。
固定讨论/拉取请求
如果您对存储库具有写权限,您可以固定讨论和拉取请求。固定讨论显示在所有讨论的顶部。




锁定讨论/拉取请求
如果您对存储库具有写权限,您可以锁定讨论或拉取请求。锁定讨论后,之前的评论仍然可见,用户将无法添加新评论。




评论编辑和审核
如果您写了评论或对存储库具有写权限,您可以在评论框右上角的上下文菜单中编辑评论内容。




评论编辑后,会在评论上方显示一个新链接。此链接显示编辑历史记录。




您也可以隐藏评论。隐藏评论是不可逆的,没有人能够再看到它的内容或编辑它。


另请阅读 审核,了解如何举报不当评论。
我可以在我的评论和讨论中使用 Markdown 和 LaTeX 吗?
是的!您可以使用 Markdown 为您的评论添加格式。此外,您可以使用 LaTeX 进行数学排版,您的公式将在使用 KaTeX 解析 Markdown 之前进行渲染。
对于 LaTeX 方程式,您必须使用以下定界符
$$ ... $$
用于显示模式\\(...\\)
用于内联模式(斜杠和括号之间没有空格)。
如何在本地管理拉取请求?
假设您的 PR 号码为 42。
git fetch origin refs/pr/42:pr/42
git checkout pr/42
# Do your changes
git add .
git commit -m "Add your change"
git push origin pr/42:refs/pr/42
草稿模式
草稿模式是在“高级模式”下从头开始创建新的 Pull Request 时默认的状态。 这种状态让其他贡献者知道您的 Pull Request 正在进行中,不能合并。 当您的分支准备就绪时,只需点击“发布”按钮即可将 Pull Request 的状态更改为“打开”。 请注意,一旦发布,您将无法再返回草稿模式。
Pull Request 的高级用法
Git 仓库中更改存储在哪里?
我们的 Pull Request 不使用 fork 和分支,而是使用直接存储在源代码仓库中的自定义“分支”,称为 refs
。
Git References 是 Git 的内部机制,它已经存储了标签和分支。
使用自定义 refs(例如 refs/pr/42
)而不是分支的优势在于,它们(默认情况下)不会被克隆仓库的人(包括仓库“所有者”)获取,但仍可以按需获取。
获取所有 Pull Request:面向 Git 大师🧙♀️
您可以调整本地 refspec 来获取所有 Pull Request
- 获取
git fetch origin refs/pr/*:refs/remotes/origin/pr/*
- 创建一个跟踪该 ref 的本地分支
git checkout pr/{PR_NUMBER}
# for example: git checkout pr/42
- 如果您进行了本地更改,要推送到 PR ref
git push origin pr/{PR_NUMBER}:refs/pr/{PR_NUMBER}
# for example: git push origin pr/42:refs/pr/42