调用 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 http://<gitweburl>/gitweb.cgi?p=<repo>.git;a=snapshot;h=HEAD
将提供 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 网络界面中单击后,我发现,更改为“树” View 并移动到 <subdir>
,然后单击“快照”使用类似于以下的 URL:http://<gitweburl>?p=<repo>;a=snapshot;h=42a6503da6aaedc92bb3543e0b0de9b2de0aaae9;sf=tgz
这正是我想要的,但我不知道这个哈希参数 h=...
是什么。这不是提交 ID - 我已经检查过了。它必须以某种方式识别 <subdir>
。但即使是这样 - 这仍然对我没有帮助,因为有人只是想要一个只从 <subdir>
开始/只包含 h=42a6503da6aaedc92bb3543e0b0de9b2de0aaae9
的快照通常不知道这个哈希。
关于如何通过 Gitweb 获取子目录快照的任何想法?
提前致谢!
添加:
刚刚发现:<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
HEAD:<subdir>
做同样的事情,让我 认为 42a6503da6aaedc92bb3543e0b0de9b2de0aaae9
和 http://<gitweburl>?p=<repo>;a=snapshot;h=42a6503da6aaedc92bb3543e0b0de9b2de0aaae9;sf=tgz
是等价的。我仍然不能只是用 HEAD:<subdir>
替换 URL http://<gitweburl>/gitweb.cgi?p=<repo>;a=snapshot;h=HEAD;f=<subdir>
中的哈希值。调用此 URL 会导致“400 - 无效的哈希参数”......所以这里没有真正的进展。
正如 poke 所建议的,使用 ojit_code 的快速肮脏黑客
$ 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'}",
最佳答案
有问题的 h
值是您当前正在查看的树对象的 ID。一次提交有一个单一的根树对象,你可以在 Gitweb 的提交页面上看到。每个树都是指向 blob(在文件的情况下)或其他树对象的目录条目列表。
因此,当您在树中更深入地导航时,h
始终表示树 id。另一方面,hb
值是提交 ID。
不幸的是,Gitweb 没有包含更好的方法来获取子目录的快照,即不知道树哈希而只知道路径。但是可能可以为其添加一些功能,将 f
参数考虑在内并自动为您获取树哈希。
我刚刚检查了这个来源,在修改 this part 时你可能会很幸运。我不太了解 perl 来告诉你到底要做什么,但你基本上可以检查 $file_name
变量是否已设置,如果是这种情况,只需获取 $hash:$file_name
的哈希值。然后将其设置为新的哈希值,一切都可以正常工作。
关于子目录的 gitweb 快照,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14444593/