web-dev-qa-db-ja.com

リモートgitリポジトリURLの有効性を確認する方法は?

Bashスクリプト内で、git URLが有効なgitリポジトリを指していること、およびスクリプトがそこから読み取るためのアクセス権を持っていることを確認する最も簡単な方法は何でしょうか?

サポートされるべきプロトコルはgit@https://、およびgit://git://プロトコル。

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

注:URLが構文的に正しいかどうかを確認するのではなく、bashスクリプト内から入力したURLの場所にリポジトリが存在することを確認する必要があります。

44
Highway of Life

この問題 に見られるように、 git ls-remote を使用してアドレスをテストできます。

Git呼び出しをデバッグする必要がある場合はset GIT_TRACE=1。例えば:

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

git ls-remote "は、実際にクローンを作成せずにリモートリポジトリとの通信をテストする最も簡単な方法です。したがって、この問題のテストとしてのユーティリティです。

アドレスの問題を検出するために使用されるのは、「 git ls-remoteは、repo で128を返します。

40
VonC

VonCの答えは正しいですが、私が最終的に使用したものは次のとおりです。

git ls-remote は、リポジトリに関する情報を返します。デフォルトでは、これはHEAD、すべてのブランチとタグ、および各エントリのコミットIDです。例えば。:

$ 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は、成功するとコード0を返し、失敗するとエラーコード128を返します。

リポジトリにアクセスできない場合、たとえば、リポジトリを表示する権限がない場合、またはその場所にリポジトリが存在しない場合、git ls-remote 戻ります:

fatal: The remote end hung up unexpectedly

これをbashスクリプトで使用するには、次のようにします...

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

注:&>-はstderrとstdoutを沈黙させるので、コマンドは何も出力しません)

40
Highway of Life