Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check the validity of a remote git repository URL?

Within a bash script, what would be the simplest way to verify that a git URL points to a valid git repo and that the script has access to read from it?

Protocols that should be supported are git@, https://, and git://. Curl fails on the git:// protocol.

[email protected]:UserName/Example.git https://[email protected]/UserName/Example.git git://github.com/UserName/Example.git 

Note: I'm not asking to check to see if a URL is syntactically correct, I need to verify that a repo exists at the URL location entered from within a bash script.

like image 654
Highway of Life Avatar asked Mar 07 '12 22:03

Highway of Life


People also ask

How do I check my git remote status?

To view your remote branches, simply pass the -r flag to the git branch command. You can inspect remote branches with the usual git checkout and git log commands. If you approve the changes a remote branch contains, you can merge it into a local branch with a normal git merge .

How do I find my remote repository URL?

You can view that origin with the command git remote -v, which will list the URL of the remote repo.


2 Answers

As seen in this issue, you can use git ls-remote to test your address.

If you need to debug the git calls set GIT_TRACE=1. eg:

env GIT_PROXY_COMMAND=myproxy.sh GIT_TRACE=1 git ls-remote https://... 

"git ls-remote" is the quickest way I know to test communications with a remote repository without actually cloning it. Hence its utility as a test for this issue.

You can see it used for detecting an address issue in "git ls-remote returns 128 on any repo".

like image 73
VonC Avatar answered Oct 05 '22 18:10

VonC


Although VonC's answer is correct, here's what I ended up using:

git ls-remote will return information about a repository, by default this is HEAD, all branches and tags, along with the commit ID for each entry. e.g.:

$ git ls-remote git://github.com/user/repo.git <commit id>    HEAD <commit id>    refs/heads/example_branch <commit id>    refs/heads/master <commit id>    refs/tags/v1.0.2 <commit id>    refs/tags/v1.0.0 

git ls-remote returns code 0 on success, error code 128 on failure.

If the repo is unreachable, for example, if you don't have permission to view the repository, or if a repository doesn't exist at that location, git ls-remote will return:

fatal: The remote end hung up unexpectedly 

To use this in a bash script, the following will work...

git ls-remote "$SITE_REPO_URL" > /dev/null 2>&1 if [ "$?" -ne 0 ]; then     echo "[ERROR] Unable to read from '$SITE_REPO_URL'"     exit 1; fi 

(Note: The > /dev/null 2>&1 silences stderr and stdout, so the command won't output anything)

like image 28
Highway of Life Avatar answered Oct 05 '22 18:10

Highway of Life