28

I add a submodule from a git@... URL, to be able to develop in it. Now I want to deploy the app and replace the URL with an git://... one, so it doesn't need authentication to the submodule's repo from Capistrano. Is editing the URL in .gitmodules totally enough to accomplish this?

Alexy
  • 1,520
  • 2
  • 16
  • 30
  • no need for sync: Git 2.25 (Q1 2020) comes with [a new command](https://stackoverflow.com/a/59364554/6309)": `git submodule set-url [--] ` – VonC Dec 16 '19 at 21:38

2 Answers2

55

Editing the .gitmodules file (then committing, and pushing it) will be adequate for any new clones.

Additionally, when a submodule is initialized (e.g. git submodule init …, git submodule update --init …, or git clone --recursive …, etc.) its URL is copied from the .gitmodules file to the repository’s .git/config file.

So, if you have any existing “deployment clones” (the ones you now want to access the submodules through git://… URLs), you will also have to update the URL in their .git/config. You can use git submodule sync to automatically copy the submodule URLs from the current .gitmodules file to your .git/config file (i.e. once you have pulled the commit that updates the .gitmodules file).

The submodule URLs in .git/config are not normally automatically updated because there are cases where you only want to override the URL in certain situations. Specifically, you will often want to use git@… URLs in your repository’s .git/config (so you can push over SSH), but put git://… URLs in .gitmodules (so that the general public does not need to do SSH-based authentication).

Chris Johnsen
  • 214,407
  • 26
  • 209
  • 186
3

I experienced similar problems, and after googling, I stumbled on this article: Relative URL for Git submodule. I found it's good a practice to follow as there's no need to manually change the .gitsubmodule file no matter who checks out it. It probably applies to your case as well.

ibic
  • 608
  • 1
  • 11
  • 16
  • Does it actually work only for submodules within the same hub of git repos? What if I connect a repo from other hub as a submod? E.g. a gitlab repo has a submodule located at github? – moudrick Mar 09 '20 at 23:35