Automatically Handling Using/Checking Out Branches With One or More Different Contained Submodules?
From: Bryce Glover <hidden>
Date: 2021-08-24 12:01:26
(Note: If this question would fit better on the git-users Google
Group, I apologize, but I saw that, unlike there — unless I overlooked
something? —, you could send messages here even if you weren't a list
subscriber.)
To whom it may concern,
Currently, the only method I've seen that you can reliably use to
switch between different branches when they don't all have the same
contained submodules comes from the Stack Overflow answer at
<https://stackoverflow.com/a/64690495/3319611>. I'll reproduce the
Bash snippet it presents as a solution here for completeness's sake:
export TARGET_BRANCH="my-branch-name"
export CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ -f ".gitmodules" ]; then
git submodules deinit --all
mkdir -p .git/git-tools/modules
mv .git/modules .git/git-tools/modules/$CURRENT_BRANCH
fi
git checkout $TARGET_BRANCH
if [ -f ".gitmodules" ]; then
if [ -f ".git/git-tools/modules/$TARGET_BRANCH" ]; then
git mv .git/git-tools/modules/$TARGET_BRANCH .git/modules
fi
git submodule sync && git submodule update --init
fi
This involves invoking some actions before '`git checkout`,' so I
couldn't have a couple of Git hooks handle this since, per '`git help
hooks`,' Git doesn't implement a 'pre-checkout' hook, only a
post-checkout one. That wouldn't be enough of a use case to motivate
adding that, though, would it? Alternatively, '`git checkout`'
would, ideally, handle this automatically, perhaps when requested by
flag if it wouldn't make sense for this behavior to be the default
one. I don't know if I'd personally be up to contributing either one
or both of either of those approaches, at least not right away, but,
hypothetically, how involved might that turn out to be?
Curious,
Bryce Glover, an amateur Git user
RandomDSdevel@gmail.com