我需要访问一个Git远程存储库,以便通过Java应用程序获得提交历史记录(而且只是这个历史记录)。我知道,JGit是一种选择。从它的文档中,我了解到您必须克隆存储库才能访问它。
是否有一种使用JGit或其他API远程访问存储库的方法(例如,不克隆它)?
由于我只对获得提交历史感兴趣,所以每次需要查看最新的提交历史时,我都看不到克隆存储库和获取更新的意义。
任何指点都会受到赞赏。
发布于 2016-12-09 13:59:13
正如施韦恩所指出的,提交历史是存储库。
了解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/的更多详细信息,请参阅本文
发布于 2016-12-09 08:25:56
您可以使用Github API来完成这个任务,但是只复制存储库就更快、更容易了。
具体来说,您可以使用获取所有的参考资料和分支过滤器(refs/heads/...)。然后,获取每个分支的最新提交,然后获取它的父级,以及它的父级,等等,直到您到达存储库的根。
请记住,提交可以有多个父级,所以不能只是线性地存储提交,您需要构建一个图。
获取每个提交都是一个单独的web请求。
要获得更新,请重复此过程,直到达到以前见过的提交为止。这意味着您必须将提交信息存储在某个地方,至少是您所见过的提交。仅仅存储分支头的It是不够的,因为重基可能会更改它们。
或者您可以做一个简单的克隆( git clone --bare ),无需签出就可以获得存储库,这将节省大量磁盘空间(但不会节省网络空间)。然后使用普通的Git程序来检查历史记录。
Git存储库格式非常高效,通常完整的历史记录不大于当前的签出大小。它的网络协议也非常非常有效。而且它知道如何用一个git fetch origin更新自己。
或者,如果您只想通过眼睛快速查看,请使用项目的Github页面上的Commits选项卡。例如。
https://stackoverflow.com/questions/41055549
复制相似问题