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

时间:2010-09-04 11:59:42

标签: java git download jgit

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

  1. 我更喜欢使用尽可能少带宽的解决方案,最好只下载该单个文件。我不需要浏览存储库,我已经有了文件的路径。
  2. 我更喜欢不依赖于其他应用程序的解决方案(例如,在机器上安装另一个git客户端)。包含git客户端实现本身的Java库将是最佳的。
  3. 我能够使用SVNKit与Subversion做类似的事情,我已经看到有一个git(eclipse's JGit)的纯java实现,它可以做类似的事情,所以我希望有一个肯定的答案;虽然从我对git如何工作的理解 - 只允许从本地存储库进行更新 - 这可能会有问题。

3 个答案:

答案 0 :(得分:9)

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

E.g。

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

Quoth git-clone(1)

  

- 深度

     

创建一个带有历史记录的浅层克隆   截断到指定的    修订数量。浅存储库有许多   限制(你无法克隆或获取它,也不能从中推送   也不   进入它),但如果你只对它感兴趣就足够了   最近   具有悠久历史的大型项目的历史,并且希望如此   将修补程序作为补丁发送。

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