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

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

我能够使用 svnkit 而且我已经看到了纯Java的git实施(Eclipse的jgit)可能能够做类似的事情,所以我希望有一个积极的答案;尽管据我了解GIT的工作原理 - 仅允许本地存储库中的更新,但这可能是有问题的。

有帮助吗?

解决方案

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

例如

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

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

其他提示

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

如果您无法在该计算机上调用命令,则仍然可以完全可以这样做,但是您必须了解GIT存储库格式。 (这比听起来不那么可怕,因为它的设计非常简单。与颠覆相比,存储库格式不打算用作黑匣子。)

Quoth git-clone(1):

- 深度深度

创建一个浅层克隆,其历史记录被截断为指定数量的修订。浅层存储库有许多局限性(您不能从中克隆或从中推出,也不能从中推动它),但是如果您只对历史悠久的大型项目的近期历史感兴趣,并且想知道,并且想想想要将修复程序作为补丁发送。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top