Skip to content

Instantly share code, notes, and snippets.

@m14t
Created July 5, 2012 21:57
Show Gist options
  • Save m14t/3056747 to your computer and use it in GitHub Desktop.
Save m14t/3056747 to your computer and use it in GitHub Desktop.
Convert HTTPS github clones to use SSH
#/bin/bash
#-- Script to automate https://help.github.com/articles/why-is-git-always-asking-for-my-password
REPO_URL=`git remote -v | grep -m1 '^origin' | sed -Ene's#.*(https://[^[:space:]]*).*#\1#p'`
if [ -z "$REPO_URL" ]; then
echo "-- ERROR: Could not identify Repo url."
echo " It is possible this repo is already using SSH instead of HTTPS."
exit
fi
USER=`echo $REPO_URL | sed -Ene's#https://github.com/([^/]*)/(.*).git#\1#p'`
if [ -z "$USER" ]; then
echo "-- ERROR: Could not identify User."
exit
fi
REPO=`echo $REPO_URL | sed -Ene's#https://github.com/([^/]*)/(.*).git#\2#p'`
if [ -z "$REPO" ]; then
echo "-- ERROR: Could not identify Repo."
exit
fi
NEW_URL="git@github.com:$USER/$REPO.git"
echo "Changing repo url from "
echo " '$REPO_URL'"
echo " to "
echo " '$NEW_URL'"
echo ""
CHANGE_CMD="git remote set-url origin $NEW_URL"
`$CHANGE_CMD`
echo "Success"
@CodeIter
Copy link

CodeIter commented Apr 9, 2022

Hi, in case someone need to get git remote url as https, whatever your remote Git repository settings are.
more at https://gist.github.com/CodeIter/be215cfef4ec1af5e1a10c4563944869

[ -z "${GITHOST}" ] && GITHOST="github.com"
[ -z "${GITBRANCH}" ] && GITBRANCH="origin"
git remote -v \
| grep "${GITBRANCH}" | grep fetch | head -n 1 \
| sed -re 's~\s+\(fetch\)$~~' \
      -re 's~([^/ :]+/[^/ :]+)$~#\1~;s~^[^#]+#+~~' \
      -re 's~(github\.com)~\1/~' \
      -re '/^https?:\/\//!s~^~https://'"${GITHOST}"'/~'

@theowenyoung
Copy link

If your https url include user:password, like https://user:token@github.com/username/reponame, then you should use this:

REPO_URL=$(git remote -v | grep -m1 '^origin' | sed -Ene's#.*(https://[^[:space:]]*).*#\1#p')

echo "$REPO_URL"
if [ -z "$REPO_URL" ]; then
    echo "-- ERROR:  Could not identify Repo url."
    echo "   It is possible this repo is already using SSH instead of HTTPS."
    exit
fi

USER=$(echo "$REPO_URL" | sed -Ene's#https://.*github.com/([^/]*)/(.*).git#\1#p')
if [ -z "$USER" ]; then
    echo "-- ERROR:  Could not identify User."
    exit
fi

REPO=$(echo "$REPO_URL" | sed -Ene's#https://.*github.com/([^/]*)/(.*).git#\2#p')
if [ -z "$REPO" ]; then
    echo "-- ERROR:  Could not identify Repo."
    exit
fi

NEW_URL="git@github.com:$USER/$REPO.git"
echo "Changing repo url from "
echo "  '$REPO_URL'"
echo "      to "
echo "  '$NEW_URL'"
echo ""

CHANGE_CMD="git remote set-url origin $NEW_URL"
eval "$CHANGE_CMD"

echo "Success"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment