You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在无写入权限的GitHub子模块中添加归属主仓库的插件

嘿,这个需求GitHub完全支持,而且有一套成熟的操作流程,我给你一步步拆解清楚:

核心结论

GitHub完全支持你描述的这种场景——把无写入权限的外部仓库作为submodule接入主仓库,既能持续拉取上游更新,又能在submodule指定目录下添加属于主仓库的插件代码。

具体实现步骤

1. 添加外部仓库作为submodule

首先在你的主仓库根目录下,执行以下命令把外部仓库添加为submodule:

git submodule add https://github.com/外部仓库的实际地址.git backends/foo

执行后,外部仓库的代码会被拉取到主仓库的backends/foo目录下,同时主仓库会生成一个.gitmodules文件记录submodule的关联信息。

2. 持续拉取上游submodule的更新

之后要同步上游仓库的最新代码,只需要在主仓库中执行:

# 更新所有submodule到上游最新版本
git submodule update --remote
# 或者只更新这个特定的submodule
git submodule update --remote backends/foo

更新完成后,主仓库会记录submodule的最新提交哈希,你只需要把这个变更提交到主仓库即可,这样团队成员拉取主仓库后也能同步到最新的submodule版本。

3. 让backends/foo/src/plugin归属于主仓库

这里分两种情况处理:

  • 如果上游仓库没有backends/foo/src/plugin目录:直接在主仓库中创建这个目录,添加你的插件文件,然后执行git add backends/foo/src/plugin/。Git会自动识别这些文件属于主仓库,不会和submodule产生冲突——因为submodule只管理backends/foo目录下原本属于上游仓库的内容,新增的目录会被主仓库接管。
  • 如果上游仓库原本存在这个目录:你需要先在本地submodule目录中,把src/plugin添加到submodule的.gitignore里(因为你没有上游的写入权限,这个修改只在本地生效,不要提交到上游),然后回到主仓库根目录,创建并添加backends/foo/src/plugin下的文件即可,同样这些文件会归属于主仓库。

你可以通过执行git status来验证:backends/foo/src/plugin下的文件会显示为待提交的变更,而submodule本身的状态不会因为这个目录的存在而异常。

关键注意事项
  • 当更新submodule时,只要上游仓库没有修改src/plugin目录(或者上游根本没有这个目录),你的插件文件就不会被覆盖;
  • 绝对不要在submodule的目录中提交plugin目录的变更——一来你没有上游的写入权限,二来这些代码属于主仓库,应该提交到主仓库的版本记录中;
  • 团队成员克隆主仓库时,记得加上--recurse-submodules参数,或者克隆后执行git submodule init && git submodule update,这样才能同时拉取submodule和主仓库中的插件代码。

内容的提问来源于stack exchange,提问作者edgarstack

火山引擎 最新活动