在不精确树的情况下,你不能只得到一个档案——当你使用时,你想得到什么--remote
git archive --remote=ssh://git@bitbucket.org/username/reponame.git --format=tar --output="file.tar" master
会工作,提到一个分支的名称。
这也适用于标签的名称。
但是,根据这个线程,提交 ID不起作用:
是否有理由git-archive
需要一个命名的 ref 而不仅仅是一个提交(或树)ID?
是的; 通常 git 存储库不允许客户端访问任意 sha1。相反,它们要求请求的对象可以被 ref 访问。
git-archive
没有正确执行这一点,并且最近被更改为只允许按名称引用,以及引用的子树(例如,HEAD:subdir/
)。
这意味着我们确实不允许任意提交或树 sha1,即使它可以从广告参考中访问。
修补 git-upload-archive 以使用 ID 会很困难吗?
我可以为 ref 使用标签,但在我的情况下,几乎每个提交都是一个看起来很浪费的标签。
正确地做这件事有点昂贵,因为在一般情况下(有人请求树 sha1),我们需要遍历每个提交的每棵树以查看它是否可以访问。
我们可能会实施一组更受限制的规则,允许“ <commit>:<subdir>
”并检查<commit>
是否可以访问。
这将不允许任意树 sha1,但我怀疑它会涵盖常见用例(即,您想要获取特定修订版的树,甚至子树)。