Automatically access git submodules via ssh or https

后端 未结 2 958
生来不讨喜
生来不讨喜 2021-01-30 01:59

Question:
Is there a way to automatically checkout git submodules via the same method (ssh or https) as the main repository?

Background:

相关标签:
2条回答
  • 2021-01-30 02:39

    I think I have a more general answer, but it's not quite automatic. There's a configuration setting you can apply in ~/.gitconfig that will replace a particular URL with the one of your choosing.

    For Github I have this in my ~/.gitconfig:

    [url "ssh://git@github.com/"]
        insteadOf = https://github.com/
    

    Here's a repository with a submodule declared with an HTTPS url that I can clone recursively using HTTPS.

    git clone --recursive https://github.com/p2/OAuth2.git

    OR

    git clone --recursive git@github.com:p2/OAuth2.git

    You can read about its use here: https://git-scm.com/docs/git-config#Documentation/git-config.txt-urlltbasegtinsteadOf

    And here: https://git-scm.com/docs/git-clone

    0 讨论(0)
  • 2021-01-30 02:51

    I finally solved this problem by specifying the submodules url as a relative path:

    So lets say your main git repository can be reached

    • either via https://gitlabserver.com/my/path/main.git
    • or via user@gitlabserver.com:my/path/main.git

    And the .gitmodules file looks like this:

    [submodule "utils"]     
        path = libs/utils   
        url = https://gitlabserver.com/my/path/utils.git
    

    That would mean that even when you check out the main application via ssh, the submodule utils would still be accessed via https.

    However, you can replace the absolute path with a relative one like this:

    [submodule "utils"]     
        path = libs/utils   
        url = ../utils.git
    

    and from now on use

    • either git clone --recursive https://gitlabserver.com/my/path/main.git
    • or git clone --recursive user@gitlabserver.com:my/path/main.git

    to get the whole repository structure which ever way you want. Obviously that doesn't work for cases where the relative ssh and the https paths are not the same, but at least for gitlab hosted repositories this is the case.

    This is also handy if you (for whatever reason) mirror your repository structure at two different remote sites.

    0 讨论(0)
提交回复
热议问题