我需要访问Git远程存储库以通过Java应用程序获取提交历史记录(以及那个)。我认为,JGit是一种选择。从它的文档中,我了解到你必须克隆存储库才能访问它。
有没有办法使用JGit或不同的API远程访问存储库(即,不克隆它)?
由于我只对获取提交历史感兴趣,因此每次需要查看最新提交历史记录时,我都没有看到克隆存储库和获取更新的重点。
任何指针都表示赞赏。
答案 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/