ツリーを正確に処理せずにアーカイブだけを取得することはできません-使用しているときに取得したいですか--remote
git archive --remote=ssh://git@bitbucket.org/username/reponame.git --format=tar --output="file.tar" master
ブランチの名前に言及して、うまくいくでしょう。
これは、タグの名前でも機能します。
ただし、このスレッドによると、コミットIDは機能しません。
git-archive
単なるコミット(またはツリー)IDではなく名前付きrefが必要な理由はありますか?
はい; 通常、gitリポジトリはクライアントが任意のsha1にアクセスすることを許可しません。代わりに、要求されたオブジェクトが参照によってアクセス可能である必要があります。
git-archive
はこれを適切に実施していませんでした。最近、名前による参照と、参照のサブツリー(たとえばHEAD:subdir/
)のみを許可するように変更されました。
つまり、アドバタイズされた参照から到達可能であっても、任意のコミットまたはツリーsha1を禁止します。
IDを使用するためにgit-upload-archiveにパッチを適用するのは難しいでしょうか?
refにタグを使用することもできますが、私の場合、ほとんどすべてのコミットが無駄に見えるタグになります。
一般的なケース(誰かがツリーsha1を要求した)では、すべてのコミットのすべてのツリーをトラバースして、到達可能かどうかを確認する必要があるため、正しく実行するには少しコストがかかります。
より制限された一連のルールを実装して、「」を許可し、到達可能な<commit>:<subdir>
ことを確認できる可能性があります。
これにより、任意のツリーsha1が許可されなくなりますが、一般的なユースケース(つまり、特定のリビジョンのツリー、またはサブツリーを取得したい場合)をカバーできると思います。<commit>