【问题标题】:Push submodule to person without access to submodule path?将子模块推送给无法访问子模块路径的人?
【发布时间】:2020-09-21 11:59:58
【问题描述】:

我有多个私有存储库,我将它们组合成 1 个组存储库,在其中我使用子模块提取更改。

有权访问组存储库但不能访问我的私人存储库的人不能git submodule update --init --recursive ,因为他们会收到“拒绝访问”错误。

有没有办法拉取和推送存储库的全部内容,而不仅仅是通过子模块的路径?从 repo 推送实际文件。

【问题讨论】:

    标签: git git-submodules


    【解决方案1】:

    没有。 Git 将始终尝试从超级项目的最新提交文件中指示的存储库中获取提交。

    假设在您的超级项目(组 repo)的提交 abc123 中,.gitmodules 文件如下所示:

    [submodule "something"]
        path = something
        url = <URL of private repo>  # here you have issues
    

    要么授予此人访问权限,要么创建一个特殊的提交,其中子模块文件指向不同的位置,可能在 dev 分支上。

    或者,最后,尝试克隆存储库,让该人手动修改子模块链接,然后使用不同的 .gitmodules 文件更新子模块。

    【讨论】:

      【解决方案2】:

      如果您无法(或不想)授予此人对私有存储库的读取权限,您能做的最好的事情就是创建另一个克隆供他们访问。虽然这看起来很迂回,但我想如果您不想让他们访问完整的历史记录,这可能是有道理的。 (您可以使用浅层克隆。)您可以单独托管克隆,或者直接将其发送给他们(也许作为他们可以用来填充本地 repo 的包)。

      一旦他们有了一个可以访问所需提交的 URL,就应该更新他们的本地 repo 的配置。他们应避免更改.gitmodules 文件,就像不应将本地排除项放入.gitignore 一样。您可以在此处找到有关子模块本地配置的更多信息:

      https://stackoverflow.com/questions/42028437/how-to-change-git-submodules-url-locally/42035018#:~:text=If%20you%20want%20to%20modify,that%20you%20want%20to%20push.&text=Then%20modify%20the%20.,the%20submodule%20URL%20as%20usual.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 2017-10-05
        • 2018-03-30
        • 2015-10-11
        • 1970-01-01
        相关资源
        最近更新 更多