I have a git repository with submodules in the directory projects/myRepo
and I want to rename the directory to projects/my-repo
.
According to this question it can simply be done with mv
. But in a repo with submodules git keeps telling me
fatal: Not a git repository: projects/myRepo/.git/path/to/submodule```
even for git status
.
Submodule config:
[submodule "path/to/submodule"]
path = path/to/submodule
url = https://github.com/user/projectName.git
Somehow the 'internal path' for the submodule does not get updated?! Is there a way to tell git to update these submodule paths?
I did experience exactly the same behavior. I managed to fix it by deleting directories with submodules, recreating them as empty directories with the right name and then running
git submodule update --init
to reinitialize them. All fixed now. Probably some permission problems (I retrieved those directories from backup earlier and permissions on them are sometimes strange).Today I had the same problem to rename the submodule and finally I fixed it by using the following steps:
Assume the old module name is
old/module
and the new one isnew/module/path
repo_root
),mv old/module new/module/path
.git/modules
mv old/module new/module/path
(create the folder first if necessary)new/module/name/config
: update theworktree
entry. It should be the relative path from this config file torepo_root/new/module/path
repo_root
and editnew/module/path/.git
, change thegitdir
to the relative path from this file torepo_root/.git/modules/new/module/path
.git/config
of the master repo: find the line containing[submodule "old/module"]
and update to[submodule "new/module/path"]
I also had the same error after changing my project directory. I have an iOS 6 XCode 4 project but that shouldn't matter.
For each submodule, you need to change the absolute path that it thinks it's in. The path is set in the .git file for that submodule. .git in a submodule is a file as opposed to a directory in a standard git directory.
For each submodule, change the .gitdir line in the .git file. Here is an example from my project:
File: /path/to/project/submodules/RestKit/.git
Before gitdir: /path/to/project//.git/modules/submodules/RestKit
After gitdir: /path/to/project//.git/modules/submodules/RestKit
Since Weston's test (clone, init and update of a submodule in a cloned repo) worked as expected when renaming the directory including said submodule, I suspect something must have been wrong in the submodule
.git
itself in your original Git repo submodule.You could compare/look for any file referencing '
myRepo
' in that first submodule.you can also compare the content of the two submodules (the first one you tried to rename, and the second one included in the repo that you cloned)