可以在' git archive'中使用--remote选项吗?在本地存储库中使用?

时间:2015-03-07 10:37:54

标签: git git-archive

当我尝试从不同的目录

在本地存储库上运行git archive
git archive --format=tar.gz --remote=file:///home/user/repos/repodir --prefix=/tmp/test_archive -o archive.tar.gz ref12345

此命令失败,输出如下。似乎不接受远程选项。

remote: fatal: no such ref: ref12345
fatal: sent error to the client: git upload-archive: archiver died with error
remote: git upload-archive: archiver died with error

当我切换到repo目录并在没有远程选项的情况下执行时,它没问题。即

cd /home/user/repos/repodir
git archive --format=tar.gz  --prefix=/tmp/test_archive -o archive.tar.gz ref12345

使用的--remote语法是否存在缺陷,或本地存储库不支持--remote选项?

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但我看到了同样的问题,并在寻找解决方案时来到这里。

这实际上是在 git-upload-archive 中实现的安全控制的副作用,它由 git archive --remote 调用。来自 the docs for git-upload-archiveSecurity 部分:

<块引用>

客户端不得使用其他 sha1 表达式,即使最终结果是可达到的。例如,既不允许像 master^ 这样的相对提交,也不允许像 abcd1234 这样的文字 sha1,即使结果可以从 refs 获得。

描述了禁用此行为的选项:

<块引用>

如果配置选项 uploadArchive.allowUnreachable 为真,这些规则将被忽略,并且客户端可以使用任意 sha1 表达式。如果您不关心无法访问对象的隐私,或者您的对象数据库已经可以通过非智能 http 公开访问,这将非常有用。

但是,如果您能够在本地运行该命令,那么正如 OP 所发现的那样,通过从存储库目录执行 git archive 命令来完全避免该问题可能更简单。我最终这样做了,类似于 one of the examples in the git archive docs:

cd $REPO && git archive --format=tar $SHA1 | (cd $TARGET_DIR && tar xf -)

我在 this Gitea issue 中遇到了这个解决方案。此处有关 SO 的其他相关问题: