aboutsummaryrefslogtreecommitdiff
path: root/git-submodule-move-git-dir
diff options
context:
space:
mode:
Diffstat (limited to 'git-submodule-move-git-dir')
-rwxr-xr-xgit-submodule-move-git-dir43
1 files changed, 43 insertions, 0 deletions
diff --git a/git-submodule-move-git-dir b/git-submodule-move-git-dir
new file mode 100755
index 0000000..cd89517
--- /dev/null
+++ b/git-submodule-move-git-dir
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# Put the .git submodule folder back to the right place.
+#
+# When initializing a git submodule, git usually puts the
+# submodules' .git folder inside the .git/modules folder
+# in the parent repository.
+#
+# While this keeps all submodule metadata in a single place,
+# it may not be confortable when you also want to develop
+# the submodule.
+#
+# This plugin simply moves the submodules' git folder back
+# to the standard place.
+
+# Parameters
+BASENAME="`basename $0`"
+MODULE="$1"
+
+# Checks
+if [ -z "$MODULE" ]; then
+ echo "usage: $BASENAME <submodule-path>"
+ exit 1
+elif [ ! -d "$MODULE" ]; then
+ echo "module not found: $MODULE"
+ exit 1
+elif [ -d "$MODULE/.git" ]; then
+ echo "module $MODULE already converted"
+ exit 1
+elif [ ! -d ".git" ]; then
+ echo "please run this command in the top-level repository folder"
+ exit 1
+fi
+
+# Additional parameters
+REPO_DIR="`pwd`"
+MODULE_DIR="`cd $MODULE &> /dev/null && pwd`"
+RELATIVE_REPO_DIR="$(echo $MODULE_DIR | sed -e "s|^$REPO_DIR/||")"
+
+# Convert
+rm $MODULE/.git
+mv ".git/modules/$RELATIVE_REPO_DIR" "$MODULE/.git"
+sed -i -e '/worktree =/d' "$MODULE/.git/config"