I have the same problem. Here is a generic recipe to reproduce, assuming a repository X with a submodule Y (set with an `https` URL): 1. `git clone ... X` 2. `cd X` 3. `git submodule sync` 4. `git submodule update --init --recursive` 5. `git remote rename origin remotex` # rename the remote in X, not Y 6. Elsewhere, add a new commit to Y and create a branch "update-y" in X, pointing the submodule to that commit. Suppose the hash of the new commit in Y is `abc1abc`. 7. `git fetch remotex` 8. `git checkout update-y` 9. `git submodule sync` 10. `GIT_TRACE=1 git submodule update --init --recursive` - observe: * the command in the last trace message to be `git fetch remotex abc1abc` (should be `git fetch origin abc1abc`, because that is still the name of the submodule's remote) * the wrong error message complaining about 'file' protocol (which isn't involved anywhere)