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"
@roeniss
Copy link

roeniss commented Aug 14, 2021

Thank you so much guys!

@ForceGT
Copy link

ForceGT commented Sep 18, 2021

Point to be noted is that if you use Xcode with Swift Package Manager then this is going to cause issues for you as Xcode by default doesn't respect this , and continues to use its own way of doing things. It is a really irritating bug. You can check this SO question for more details

https://stackoverflow.com/questions/58165880/xcode-11-spm-authentication-failed-because-no-credentials-provided

@siduck
Copy link

siduck commented Jan 15, 2022

@brettalton thanks for the one liner!

@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