How do I replace a git submodule with another repo?

后端 未结 6 1323
野性不改
野性不改 2020-11-28 02:12

How do I replace a git submodule with a different git repo?

Specifically, I have a submodule:

  • located at ./ExternalFrameworks/TestFramework
相关标签:
6条回答
  • 2020-11-28 02:51

    First, delete the current submodule with the method already mentioned here, which I'm including for convenience:

    • Delete the relevant section from the .gitmodules file
    • Delete the relevant section from .git/config
    • Run git rm --cached path_to_submodule (no trailing slash)
    • Commit and delete the now untracked submodule files

    Now, add the new submodule with the --name flag. This will give git an alternate name to reference in .git/config for the submodule, to deconflict with the submodule that was there historically, which you still want to work in your prior history.

    So type:

    git submodule add --name UpdatedTestFramework git@github.com:userB/TestFramework.git
    

    and you'll get the submodule loaded at the path you expect.

    0 讨论(0)
  • 2020-11-28 02:51

    The easiest way that I found is this:

    git rm -rf [submodule_dir]
    git submodule add --name new_[submodule_name] [new_submodule_url] [submodule_dir]
    

    I didn't like the idea to modify my .gitmodules manually. I also wrote a little blogpost about it.

    0 讨论(0)
  • 2020-11-28 02:56

    These commands will do the work on command prompt without altering any files on local repository.

    git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
    git config --file=.gitmodules submodule.Submod.branch Dev
    git submodule sync
    git submodule update --init --recursive --remote
    
    0 讨论(0)
  • 2020-11-28 02:57

    If the location (URL) of the submodule has changed, then you can simply:

    1. Modify your .gitmodule file to use the new URL
    2. Delete the submodule folder in the repo rm -rf .git/modules/<submodule>
    3. Delete the submodule folder in the working directory rm -rf <submodule>
    4. Run git submodule sync
    5. Run git submodule update

    More complete info can be found elsewhere:

    • Changing remote repository for a git submodule
    0 讨论(0)
  • 2020-11-28 03:00

    If you want to change the remote URL only for this clone:

    git config submodule."$submodule_name".url "$new_url"
    

    This won't affect the .gitmodules file in the parent project, so it won't be propagated to other developers.

    This is described as "user specific record changes" here.

    Do not run git submodule sync as that will reset to the default URL again.

    0 讨论(0)
  • 2020-11-28 03:01

    What fixed this for me was in the root of your git repo (not the submodule), run

    rm -rf .git/modules/yourmodule
    

    Then you should be able to add as normal.

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