如何让GitHub仓库使用子模块中的PR模板?
仓库说明
- Repo A:在路径
.github/PULL_REQUEST_TEMPLATE.md下存放了PR模板文件。 - Repo B:将Repo A作为子模块引入使用。
目录结构如下:
Repo A (作为Repo B的子模块): repo_a/ ├── .github/ │ └── PULL_REQUEST_TEMPLATE.md └── ... (其他文件和目录) Repo B: repo_b/ ├── repo_a/ (子模块) └── ... (其他文件和目录)
问题
在Repo B中创建拉取请求(PR)时,子模块Repo A内的PR模板无法自动生效。
问询
能否配置GitHub使其直接使用子模块中的PR模板?若无法实现,当一个仓库作为另一个仓库的子模块时,共享PR模板的最佳实践是什么?要求不使用通用模板,且尽可能避免GitHub Actions。
已尝试操作
- PR模板在Repo A中可正常使用。
- 确认该模板在Repo B的子模块中路径正确。
- 在PR创建URL后追加
?template=pull_request_template.md,无效果。
解答
能否直接使用子模块中的PR模板?
不能。GitHub只会在当前仓库的根目录、.github/或docs/目录下查找PR模板文件,不会遍历子模块目录读取内容。你尝试的URL参数?template=仅支持指向当前仓库内的文件路径,无法引用子模块中的文件,因此该方法无效。共享PR模板的最佳实践(满足需求的方案)
以下几种方案无需通用模板、也不需要GitHub Actions:
硬链接同步(限支持硬链接的系统)
在Repo B的根目录.github/下创建指向子模块中PR模板的硬链接,命令示例:# 先确保Repo B的.github目录存在 mkdir -p repo_b/.github # 创建硬链接 ln repo_b/repo_a/.github/PULL_REQUEST_TEMPLATE.md repo_b/.github/PULL_REQUEST_TEMPLATE.md硬链接会让Repo B的
.github目录下生成一个与子模块模板内容同步的文件,GitHub可以正常识别。注意硬链接仅能在同一文件系统下创建,提交到Git时会被视为独立文件,子模块模板更新后需重新创建硬链接或手动同步。手动复制同步
定期将Repo A中的PR模板文件复制到Repo B的.github/PULL_REQUEST_TEMPLATE.md路径下。这种方式简单直接,适合模板更新频率较低的场景,每次模板变更后手动同步一次即可。改用Git子树替代子模块
如果可以调整仓库依赖方式,将Repo A作为子树合并到Repo B中,而非子模块。子树会将Repo A的内容直接合并到Repo B的目录中,这样GitHub就能读取到.github下的模板文件。不过子树的维护逻辑与子模块不同,需要使用git subtree命令来同步更新。
内容的提问来源于stack exchange,提问作者Matthew Borish

