From: Oleg Broytman Date: Tue, 6 Feb 2024 21:30:03 +0000 (+0300) Subject: Add scripts to unabsorb git dirs X-Git-Url: https://git.phdru.name/?p=git-scripts.git;a=commitdiff_plain;h=99f22d0045c5002c384a599cc0f0b203f429eedf Add scripts to unabsorb git dirs They do reverse of `git submodule absorbgitdirs`. There are simple and recursive variants. --- diff --git a/submodules/unabsorbgitdirs b/submodules/unabsorbgitdirs new file mode 100755 index 0000000..2416477 --- /dev/null +++ b/submodules/unabsorbgitdirs @@ -0,0 +1,23 @@ +#! /bin/sh +set -e + +# To the top-level directory of the current submodule +cd "`git rev-parse --show-toplevel`" + +unset GIT_DIR + +# If .git/ subdirectory is already here +test -d .git && exit 0 + +if ! test -f .git; then + echo "Error: Cannot find gitlink, aborting" >&2 + exit 1 +fi + +# Fix core.worktree now +git config --unset core.worktree + +read _gitdir gitpath < .git +unset _gitdir +rm .git +exec mv "$gitpath" .git diff --git a/submodules/unabsorbgitdirs-recursive b/submodules/unabsorbgitdirs-recursive new file mode 100755 index 0000000..72b4464 --- /dev/null +++ b/submodules/unabsorbgitdirs-recursive @@ -0,0 +1,38 @@ +#! /bin/sh +# The script cannot be run with `git submodule foreach --recursive` +# because the command runs recursively from top to bottom +# while the command is required to be run from bottom to top +# because it doesn't fix childrens' gitlinks. +# So the script runs recursion itself; +# it can be run with `git submodule foreach` without `--recursive`. +set -e + +START_DIR="`pwd`" +cd "`dirname \"$0\"`" +PROG_DIR="`pwd`" +cd "$START_DIR" + +# To the top-level directory of the current submodule or the superproject +cd "`git rev-parse --show-toplevel`" + +unset GIT_DIR + +# If .git/ subdirectory is already here +test -d .git && exit 0 + +if ! test -f .git; then + echo "Error: Cannot find gitlink, aborting" >&2 + exit 1 +fi + +if test -f .gitmodules; then + git submodule foreach "$PROG_DIR"/"`basename \"$0\"`" +fi + +# Fix core.worktree now +git config --unset core.worktree + +read _gitdir gitpath < .git +unset _gitdir +rm .git +exec mv "$gitpath" .git