3

テストアーキテクチャをセットアップしています。このシステムでは、VM はコードの特定のリビジョンをテストする必要があります。VM は完全にクリーンで、リポジトリのローカル (更新可能な) バージョンがありません。コードは、git という名前のユーザーを使用して ssh を介して、オンサイトの git サーバーでホストされています。私は両方のマシンを完全に制御しています。

簡単な解決策は次のとおりです。

git clone --no-checkout git@gitserver:reponame.git
git checkout 8e8fdea8f8367f4a179d2faddbaadba495d6bc12

これは機能しますが、やりすぎです。完全な履歴をネットワーク経由で転送します。これは、可能であれば避けたいことです。

git cloneオプションを取ることができるドキュメントから私には思え--branchますが、これでは特定のリビジョンを指定できません。もしそうなら、これと組み合わせて--depth 1私にとってはうまくいくでしょう。

別の方法は、 を使用することgit archive --remoteです。これが任意のリビジョンを取得できるようにすることのセキュリティへの影響を理解しています。この場合、それは問題ではないので、実行します

git config --global --bool --add uploadArchive.allowUnreachable 1

git サーバーで git ユーザーとして。

これで、git ユーザーのシェルで、次のことができます。

git archive --format tar.gz --remote reponame.git 8e8fdea8f8367f4a179d2faddbaadba495d6bc12

また、VMから実行できます

git archive --format tar.gz --remote git@gitserver:reponame.git master

ただし、機能しないのは次のとおりです。

git archive --format tar.gz --remote git@gitserver:reponame.git 8e8fdea8f8367f4a179d2faddbaadba495d6bc12

remote: fatal: no such ref: 8e8fdea8f8367f4a179d2faddbaadba495d6bc12
remote: git upload-archive: archiver died with error
fatal: sent error to the client: git upload-archive: archiver died with error

はい、私は同じレポを指しています。そのリビジョンは間違いなくレポにあります。リビジョン番号では機能しません。1 つのケースとして考えられるのは、コマンドが ssh 経由で実行される場合、デフォルト~/.gitconfigファイルが読み取られないことですが、これに関する情報は見つかりませんでした。

現在、git ユーザーのシェルとして bash を使用しています。将来的には制限付きシェルで動作する予定ですが、基本的な問題を示すために、通常のシェルを使用したかったのです。

クリーンなマシンに単一のリビジョンを取得する方法に関する一般的な意見と、リビジョンで git アーカイブを使用できないという特定の問題の解決策の両方に興味があります。


編集: torek はバージョンについていくつかのアイデアをくれました (私は OSX で実行し、git 1.8.5.2 ストックを使用し、brew を介して 2.0.1 をインストールしました)、git-upload-archive何が起こっているのかを把握するために小さなラッパー スクリプトを作成しました。ラッパー スクリプト:

/usr/local/bin/git --version > /tmp/version
tee /tmp/stdin | /usr/local/bin/git-upload-archive "$1" | tee /tmp/stdout

--execこのスクリプトを実行するオプションを指定して git-archive を呼び出します。

書かれているバージョンは 2.0.1 です。ただし、同じ問題は解決しません...ローカルから-remoteを使用してgit-archiveを呼び出すことができ、sha1uploadarchive.allowunreachableが設定されている場合、リモートではできません。興味深いことに、( の/tmp/stdin) 要求はどちらの場合もまったく同じですが、応答は異なります。私が見る限り、これは ssh で起動した場合に git-upload-archive が正しい構成を取得していないためです。これは、レポでローカル構成を使用して表示できます。その場合は機能します (これが機能しなかったというコメントでの私の発言は、実際に拾っていたため/usr/bin/git-upload-archiveです。この構成フラグを許可しない古いバージョン)。

/usr/local/bin/git upload-archiveこの問題は、代わりに を呼び出すことで実際に解決できます/usr/local/bin/git-upload-archive。これは git-archive の引数として指定することもできます:--exec='/usr/local/bin/git-upload-archive'動作しません--exec='/usr/local/bin/git upload-archive'

したがって、問題は現在機能しています。git-upload-archive が構成を取得しない理由に (学術的な観点から) 興味があります。おそらく、これは git プロジェクトに報告すべきバグです。

4

1 に答える 1