【发布时间】:2020-09-21 11:59:58
【问题描述】:
我有多个私有存储库,我将它们组合成 1 个组存储库,在其中我使用子模块提取更改。
有权访问组存储库但不能访问我的私人存储库的人不能git submodule update --init --recursive ,因为他们会收到“拒绝访问”错误。
有没有办法拉取和推送存储库的全部内容,而不仅仅是通过子模块的路径?从 repo 推送实际文件。
【问题讨论】:
标签: git git-submodules
我有多个私有存储库,我将它们组合成 1 个组存储库,在其中我使用子模块提取更改。
有权访问组存储库但不能访问我的私人存储库的人不能git submodule update --init --recursive ,因为他们会收到“拒绝访问”错误。
有没有办法拉取和推送存储库的全部内容,而不仅仅是通过子模块的路径?从 repo 推送实际文件。
【问题讨论】:
标签: git git-submodules
没有。 Git 将始终尝试从超级项目的最新提交文件中指示的存储库中获取提交。
假设在您的超级项目(组 repo)的提交 abc123 中,.gitmodules 文件如下所示:
[submodule "something"]
path = something
url = <URL of private repo> # here you have issues
要么授予此人访问权限,要么创建一个特殊的提交,其中子模块文件指向不同的位置,可能在 dev 分支上。
或者,最后,尝试克隆存储库,让该人手动修改子模块链接,然后使用不同的 .gitmodules 文件更新子模块。
【讨论】:
如果您无法(或不想)授予此人对私有存储库的读取权限,您能做的最好的事情就是创建另一个克隆供他们访问。虽然这看起来很迂回,但我想如果您不想让他们访问完整的历史记录,这可能是有道理的。 (您可以使用浅层克隆。)您可以单独托管克隆,或者直接将其发送给他们(也许作为他们可以用来填充本地 repo 的包)。
一旦他们有了一个可以访问所需提交的 URL,就应该更新他们的本地 repo 的配置。他们应避免更改.gitmodules 文件,就像不应将本地排除项放入.gitignore 一样。您可以在此处找到有关子模块本地配置的更多信息:
【讨论】: