从远程git存储库获取单个文件

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

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

我能够使用SVNKit做一些与Subversion类似的东西,我已经看到有一个纯粹的java实现的git( eclipse的JGit )可能能够做类似的事情,所以我希望有一个肯定的答案; 虽然从我对git如何工作的理解 – 只允许来自本地存储库的更新 – 这可能certificate是有问题的。

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

例如

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

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

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

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

Quit git-clone(1) :

– 深度

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

因此粒度是一个目录,但您可以限制修订历史记录。