3

URL を呼び出すと、から始まるhttp://<gitweburl>/gitweb.cgi?p=<repo>;a=tree;f=<subdir>;hb=HEADツリーが表示されます。<repo><subdir>

URL を呼び出すhttp://<gitweburl>/gitweb.cgi?p=<repo>;a=snapshot;f=<subdir>;hb=HEADと 404 が生成されます。

URL を呼び出すと、HEAD リビジョンhttp://<gitweburl>/gitweb.cgi?p=<repo>.git;a=snapshot;h=HEADのスナップショットが提供されます。<repo>

Gitweb にサブディレクトリから始まるスナップショットを作成させる正しい構文が見つかりません。私は次のことにつながる何かを意味します:$ git archive --format=tar --remote=<gituser>@<gitserver>:<repo> HEAD:<subdir>

私は単純に URL を呼び出してみましhttp://<gitweburl>/gitweb.cgi?p=<repo>;a=snapshot;h=HEAD;f=<subdir>たが、その結果、リポジトリ全体を含むスナップショット アーカイブが作成されます

Gitweb Web インターフェイスをクリックした後、「ツリー」ビューに変更し、<subdir>「スナップショット」に移動してからクリックすると、次のような URL が使用されることがわかりました。

http://<gitweburl>?p=<repo>;a=snapshot;h=42a6503da6aaedc92bb3543e0b0de9b2de0aaae9;sf=tgz

これはまさに私が望むものを提供しますが、このハッシュパラメーターh=...が何であるかわかりません。コミットIDではありません-チェックしました。何らかの方法で を識別する必要があります<subdir>。しかし、それがあったとしても、これはまだ役に立ちません。なぜなら、スナップショットを開始する/含むだけが必要な人<subdir>は、通常、このハッシュを知らないからです。

Gitweb 経由でサブディレクトリのスナップショットを取得する方法について何か考えはありますか? 前もって感謝します!


添加:

ちょうど見つけた:可視にh=42a6503da6aaedc92bb3543e0b0de9b2de0aaae9関連付けられたハッシュ値です。<subdir>$ git ls-tree -r -t HEAD

したがって、これらの2つのコマンド:

$ git archive --format=tar --remote=<gituser>@<gitserver>:<repo> HEAD:<subdir>

$ git archive --format=tar --remote=<gituser>@<gitserver>:<repo> 42a6503da6aaedc92bb3543e0b0de9b2de0aaae9

私がそれを考えさせて、同等である同じことをしてください。それでも、ハッシュをに置き換えることはできません。この URL を呼び出すと、「400 - 無効なハッシュ パラメータ」という結果になるため、ここでは実際の進行はありません。HEAD:<subdir>42a6503da6aaedc92bb3543e0b0de9b2de0aaae9http://<gitweburl>?p=<repo>;a=snapshot;h=42a6503da6aaedc92bb3543e0b0de9b2de0aaae9;sf=tgzHEAD:<subdir>


poke で提案されているように、使用するクイックアンドダーティハックURL http://<gitweburl>/gitweb.cgi?p=<repo>;a=snapshot;h=HEAD;f=<subdir>

$ diff -Naur gitweb.cgi.original gitweb.cgi.new 
--- gitweb.cgi.original 2012-09-28 00:50:47.000000000 +0200
+++ gitweb.cgi.new  2013-01-22 11:04:29.870532502 +0100
@@ -7029,6 +7029,9 @@

    my ($name, $prefix) = snapshot_name($project, $hash);
    my $filename = "$name$known_snapshot_formats{$format}{'suffix'}";
+   if ($file_name) {
+       $hash="$hash:$file_name"
+   }
    my $cmd = quote_command(
        git_cmd(), 'archive',
        "--format=$known_snapshot_formats{$format}{'format'}",
4

2 に答える 2

2

問題のh値は、現在見ているツリー オブジェクトの ID です。コミットには単一のルート ツリー オブジェクトがあり、Gitweb のコミット ページで確認できます。各ツリーは、ブロブ (ファイルの場合) または他のツリー オブジェクトを指すディレクトリ エントリのリストです。

したがって、ツリーをさらに深くナビゲートしている場合、 はh常にツリー ID を表します。一方hb、値はコミット ID です。

残念ながら、Gitweb には、サブディレクトリのスナップショットを取得するためのより適切な方法が含まれていません。つまり、ツリー ハッシュを知らずにパスだけを取得します。fしかし、パラメータを考慮してツリーハッシュを自動的に取得する機能を追加することはおそらく可能です。

これについてソースを確認したところ、この部分を変更すると運がいいかもしれません。私はperlをよく知らないので、正確に何をすべきかを教えてくれませんが、基本的には$file_name変数が設定されているかどうかを確認し、そうであれば、のハッシュを取得するだけです$hash:$file_name。次に、それを新しいハッシュに設定すると、すべてが機能します。

于 2013-01-21T18:14:19.730 に答える