6

有没有办法用 Java 以编程方式从远程 git 存储库下载单个文件?

  1. 我更喜欢使用尽可能少的带宽的解决方案,最好只下载单个文件。我不需要浏览存储库,我已经有了文件的路径。
  2. 我更喜欢不依赖于其他应用程序的解决方案(例如在机器上安装另一个 git 客户端)。包含 git 客户端实现本身的 Java 库将是最佳选择。

我能够使用SVNKit对 Subversion 做类似的事情,我已经看到有一个纯 java 的 git 实现(eclipse 的 JGit)可能能够做类似的事情,所以我希望有一个肯定的答案;尽管根据我对 git 工作原理的了解——只允许从本地存储库进行更新——这可能会被证明是有问题的。

4

3 回答 3

10

git 并不是真正为从远程存储库访问单个文件而设计的,但您可以滥用git archive这一点。缺点是您必须下载“树”,而不仅仅是您需要的 blob。

例如

git archive --remote=url://to.git.repo branch path/to/dir | tar -x file

作为替代方案,如果您在远程存储库上设置了 gitweb,则可以使用简单的 curl 或 wget 命令以“原始”格式下载任何文件。

于 2010-09-04T13:21:31.460 回答
3

您对远程存储库有什么样的访问权限?是通过SSH,可以调用命令吗?如果是这样,您可以调用.git show HEAD:$path_to_file

如果您无法在该机器上调用命令,仍然完全可以执行此操作,但您必须了解 Git 存储库格式。(这并不像听起来那么可怕,因为它的设计非常简单。与 Subversion 不同,存储库格式不打算用作黑匣子。)

于 2010-09-04T13:10:20.280 回答
0

Quoth git-clone(1)

--depth 深度

创建一个浅克隆,其历史被截断为指定的修订数。浅层存储库有许多限制(您不能克隆或从中获取,也不能从中推送或进入),但如果您只对历史悠久的大型项目的近期历史感兴趣,并且想要作为补丁发送修复。

所以粒度是一个目录,但你可以限制修订历史。

于 2010-09-04T12:20:03.263 回答