While finding .git directory and sed
ing on config under that directory works perfectly, I like to let git handle this.
This should work for any nested directories that may have git repositories. It will find any .git directories, cd to one directory above that .git and check for given remote type (origin by default) and modify the old remote with new remote. Usage is: ./thisscript 'git@github.com:oldcompany' 'git@github.com:newcompany' origin
If your remote is origin
, you don't need to pass the 3rd argument. Hope this helps people.
#!/usr/bin/env bash
# Usage: ${0} [OLD_REMOTE] [NEW_REMOTE] [REMOTE_NAME]
OLD_REMOTE="${1:-bitbucket.org:mybbcompany}"
NEW_REMOTE="${2:-github.com:myghcompany}"
REMOTE_NAME="${3:-origin}"
find "${PWD}" -type d -name '.git' | while read dir; do
cd "${dir}/.."
current_remote_url=$(git remote get-url "${REMOTE_NAME}")
if grep "${OLD_REMOTE}" <<< "${current_remote_url}"; then
new_remote_url=$(sed "s/${OLD_REMOTE}/${NEW_REMOTE}/" <<< "${current_remote_url}")
echo "Changing ${current_remote_url} to ${new_remote_url}"
git remote set-url "${REMOTE_NAME}" "${new_remote_url}"
fi
done
Hope this will be useful for someone.