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の場所にリポジトリが存在することを確認する必要があります。
この問題 に見られるように、 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を返します。
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を沈黙させるので、コマンドは何も出力しません)