题
有没有一种方法可以从Java中的远程git存储库中编程下载单个文件?
- 我更喜欢使用尽可能少的带宽的解决方案,最好只能下载该文件。我不需要浏览存储库,我已经有了文件的路径。
- 我更喜欢一种不依赖其他应用程序的解决方案(例如,在计算机上安装另一个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):
- 深度深度
创建一个浅层克隆,其历史记录被截断为指定数量的修订。浅层存储库有许多局限性(您不能从中克隆或从中推出,也不能从中推动它),但是如果您只对历史悠久的大型项目的近期历史感兴趣,并且想知道,并且想想想要将修复程序作为补丁发送。
因此,粒度是一个目录,但您可以限制修订历史记录。
不隶属于 StackOverflow