How to change git submodules url locally?

前端 未结 3 623
执念已碎
执念已碎 2020-12-31 11:14

The original .gitmodules file uses the hard coded https urls but for some automated tests I clone from ssh and make the submodule urls

相关标签:
3条回答
  • 2020-12-31 11:19

    I tried the above solution but had a mess of problems for some reason. The following is an alternative.

    In a new repository:

    1. git submodule init
    2. Initialize each submodule manually with git clone ../local/path/to/submodule.git path/in/repo/submodule

    Whenever the root repository submodule hashes change and you need to sync the submodules:

    1. Update the root repository
    2. git submodule update with maybe --force and --recursive for good measure
    0 讨论(0)
  • 2020-12-31 11:37

    If you want to modify the URL used for a submodule only for the local repo, then don't modify the .gitmodules file, that is only for changes that you want to push.

    Instead, first initialize the local submodule config:

    git submodule init
    

    Then modify the .git/config file to change the submodule URL as usual. (Again, no need to modify .gitmodules here, and if this is a new clone you probably won't have .git/modules yet.)

    As @jthill points out, an easier way to modify the submodule URLs is:

    git config submodule.moduleName.url ssh://user@server/path
    

    At this point you don't want to run git submodule sync, because that will overwrite the changes you just made with the values from the .gitmodules file. Instead, go straight to:

    git submodule update --recursive --remote
    
    0 讨论(0)
  • 2020-12-31 11:38

    Not only you can change the submodule URL with git config submodule.moduleName.url, but:

    • With Git 2.25 (Q1 2020), you can modify it.
      See "Git submodule url changed" and the new command git submodule set-url [--] <path> <newurl>

    • with Git 2.22 (Q2 2019), you can also unset it:

    See commit b57e811, commit c89c494 (08 Feb 2019), and commit 7a4bb55 (07 Feb 2019) by Denton Liu (Denton-L).
    (Merged by Junio C Hamano -- gitster -- in commit 01f8d78, 25 Apr 2019)

    submodule--helper: teach config subcommand --unset

    This teaches submodule--helper config the --unset option, which removes the specified configuration key from the .gitmodule file.

    That is:

    git submodule--helper config --unset submodule.submodule.url &&
    git submodule--helper config submodule.submodule.url >actual &&
    test_must_be_empty actual
    

    With Git 2.27 (Q2 2020), the rewriting various parts of "git submodule" in C continues, include set-url.

    See commit 6417cf9 (08 May 2020) by Shourya Shukla (periperidip).
    (Merged by Junio C Hamano -- gitster -- in commit 9e8ed17, 13 May 2020)

    submodule: port subcommand 'set-url' from shell to C

    Signed-off-by: Shourya Shukla

    Convert submodule subcommand 'set-url' to a builtin. Port 'set-url' to 'submodule--helper.c' and call the latter via 'git submodule.sh'.

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