if ! command git rev-parse --is-inside-work-tree >/dev/null 2>&1; then print "${0}: not a repository work tree: ${PWD}" >&2 return 1 elif [[ "${PWD}" != "$(git-root)" ]]; then print "${0}: must be run from the root of the work tree" >&2 return 1 fi local src="${1}" local dst="${2}" local url url="$(command git config --file "$(git-root)/.gitmodules" --get "submodule.${src}.url")" if (( ! "${+url}" )); then print "${0}: submodule not found: ${src}" >&2 return 1 fi mkdir -p "${dst:h}" git-submodule-remove "${src}" git submodule add "${url}" "${dst}" return 0