#!/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 " 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 [ ! -e ".git" ]; then echo "please run this command in the top-level repository folder" exit 1 elif [ ! -f "$MODULE/.git" ]; then echo "$BASENAME: not a file, or file not found: $MODULE/.git" exit 1 elif [ -e "$MODULE/.gitmodules" ]; then echo "$BASENAME: this repository has submodules; use git-submodule-move-all-git-dirs instead" exit 1 fi # Setup RELATIVE_REPO_DIR="$(cd $MODULE &> /dev/null && cd `cut -d : -f 2 .git` &> /dev/null && pwd)" REPO_DIR="`pwd`" MODULE_DIR="`cd $MODULE &> /dev/null && pwd`" if [ -z "$RELATIVE_REPO_DIR" ] || [ ! -d "$RELATIVE_REPO_DIR" ]; then RELATIVE_REPO_DIR=".git/modules/$RELATIVE_REPO_DIR/$(echo $MODULE_DIR | sed -e "s|^$REPO_DIR/||")" fi if [ -z "$RELATIVE_REPO_DIR" ] || [ ! -d "$RELATIVE_REPO_DIR" ]; then echo "$BASENAME: no git folder found for submodule $MODULE" exit 1 fi if [ ! -e "$RELATIVE_REPO_DIR/config" ]; then echo "$BASENAME: config not found at $RELATIVE_REPO_DIR/config" exit 1 fi # Convert rm $MODULE/.git && \ mv "$RELATIVE_REPO_DIR" "$MODULE/.git" && \ sed -i -e '/worktree =/d' "$MODULE/.git/config"