Skip to content

Instantly share code, notes, and snippets.

@m14t
Created July 5, 2012 21:57
Show Gist options
  • Select an option

  • Save m14t/3056747 to your computer and use it in GitHub Desktop.

Select an option

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="[email protected]:$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
Copy Markdown

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
Copy Markdown

If your https url include user:password, like https://user:[email protected]/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="[email protected]:$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