Git submodules are supported by git-annex since version 5.20150303.
Git normally makes a .git
file in a
submodule, that points to the real git repository under .git/modules/
.
This presents problems for git-annex. So, when used in a submodule,
git-annex will automatically replace the .git
file with a symlink
pointing at the git repository. (When the filesystem doesn't support
symlinks, an adjusted unlocked branch is used, and submodules are
supported in that setup too.)
With that taken care of, git-annex should work ok in submodules. Although this is a new and somewhat experimental feature.
The conversion of .git file to .git symlink mostly won't bother git.
Known problems:
- If you want to delete a whole submodule,
git rm submodule
will refuse to delete it, complaining that the submodule "uses a .git directory". Workaround: Userm -rf
to delete the tree, and thengit commit
.
After setting up git-annex in one of my submodules, I noticed that executing
git checkout mybranch --recurse-submodules
will cause a fatal error (see error message below) and my working copy will be left in a state somewhere in between the origin and the destination branch.As a workaround, this two-step alternative seems to work fine though:
git checkout mybranch && git submodule update
.Everything above applies to command
git switch
as well.I use git version 2.27.0 and git-annex version 8.20200618
Error Message: fatal: could not open 'path/to/my/submodule/.git' for writing: Is a directory