Git API无需克隆即可访问远程存储库

时间:2016-12-09 07:52:34

标签: git github jgit

我需要访问Git远程存储库以通过Java应用程序获取提交历史记录(以及那个)。我认为,JGit是一种选择。从它的文档中,我了解到你必须克隆存储库才能访问它。

有没有办法使用JGit或不同的API远程访问存储库(即,不克隆它)?

由于我只对获取提交历史感兴趣,因此每次需要查看最新提交历史记录时,我都没有看到克隆存储库和获取更新的重点。

任何指针都表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以使用Github API来完成此操作,但只需克隆存储库就可以更快,更轻松。

具体来说,您需要get all references并过滤分支(refs/heads/...)。然后get the latest commit on each branch,然后获取其父母及其父母的父母,依此类推,直到您到达存储库的根目录。

请记住,提交可以有多个父项,因此您不能只是线性存储提交,需要构建图形。

获取每个提交是一个单独的Web请求。

你是rate limited to 5000 requests per hour

要获取更新,请重复此过程,直到达到您之前看到的提交。这意味着你必须在某处存储提交信息,至少是你见过的提交。仅仅存储分支头的ID是不够的,因为rebase可能会改变它们。

或者你可以做一个裸克隆git clone --bare,以获得没有结账的存储库,这将节省大量的磁盘空间(但不是网络)。然后使用普通的Git程序来检查历史记录。

Git存储库格式非常高效,通常完整的历史记录不会大于当前的结帐大小。它的网络协议也非常非常有效。它知道如何仅用git fetch origin更新自己。

或者,如果您只想快速查看,请使用项目的Github页面上的Commits选项卡。 For example

答案 1 :(得分:0)

正如Schwern所指出的,提交历史存储库。

走一条git存储库历史的明智方法是首先克隆它。如果您只对历史记录感兴趣,可以省略结帐或创建裸克隆。在JGit中,使用CloneCommand,如下所示:

Git git = Git.cloneRepository()
  .setURI( "https://example.org/repo.git" )
  .setDirectory( "/path/to/local/copy" )
  .setNoCheckout( true ) // or .setBare( true )
  .call();

有关JGit的CloneCommand的更多详细信息,请参阅此文章:http://www.codeaffine.com/2015/11/30/jgit-clone-repository/