调用 URLhttp://<gitweburl>/gitweb.cgi?p=<repo>;a=tree;f=<subdir>;hb=HEAD
将显示<repo>
从 开始的树<subdir>
。
调用 URLhttp://<gitweburl>/gitweb.cgi?p=<repo>;a=snapshot;f=<subdir>;hb=HEAD
将产生 404。
调用 URLhttp://<gitweburl>/gitweb.cgi?p=<repo>.git;a=snapshot;h=HEAD
将提供<repo>
HEAD 修订的快照。
我找不到正确的语法来让 Gitweb 从子目录开始提供快照。我的意思是导致:$ git archive --format=tar --remote=<gituser>@<gitserver>:<repo> HEAD:<subdir>
我天真地尝试调用 URLhttp://<gitweburl>/gitweb.cgi?p=<repo>;a=snapshot;h=HEAD;f=<subdir>
但这会导致包含整个存储库的快照存档。
在 Gitweb 网络界面中单击后,我发现,更改为“树”视图并移动到<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
所以这两个命令:
$ git archive --format=tar --remote=<gituser>@<gitserver>:<repo> HEAD:<subdir>
$ git archive --format=tar --remote=<gituser>@<gitserver>:<repo> 42a6503da6aaedc92bb3543e0b0de9b2de0aaae9
做同样的事情,让我认为这是等效的。我仍然不能只用. 调用此 URL 会导致“400 - 无效的哈希参数”......所以这里没有真正的进展。HEAD:<subdir>
42a6503da6aaedc92bb3543e0b0de9b2de0aaae9
http://<gitweburl>?p=<repo>;a=snapshot;h=42a6503da6aaedc92bb3543e0b0de9b2de0aaae9;sf=tgz
HEAD:<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'}",