2016-12-09 19 views
1

Javaアプリケーションを使用してコミット履歴を取得するには、Gitリモートリポジトリにアクセスする必要があります。 JGitは、オプションです。そのドキュメントから、リポジトリにアクセスするためにリポジトリをクローンする必要があることを知りました。リモートリポジトリにクローンを作成せずにアクセスするためのGit API

JGitまたは別のAPIを使用してリポジトリにリモートで(つまり、クローンを作成せずに)アクセスする方法はありますか?

私はコミット履歴だけを取得することに興味があるので、最新のコミット履歴を確認する必要があるたびに、リポジトリを複製し、更新を取得することについて一点も分かりません。

いずれのポインタもありがとうございます。

+0

おそらくhttps://developer.github.com/v3/ – nullpointer

+0

で何かを探してコミット履歴*はリポジトリです。'git log'の出力のようなコミットログメッセージ、日付、時刻だけを意味しますか?おそらく、リポジトリを複製する方が良いでしょう。ウェブAPI経由で取得しようとするよりも速く、更新を管理する必要はありません。 – Schwern

+0

私はgit ls-remoteはあなたがクローンする必要がないいくつかのコマンドの1つだと思いますが、それはあなたにコミットをもたらすわけではありません – pedrorijo91

答えて

1

Github APIを使用するとできますが、リポジトリを複製するほうがはるかに高速で簡単です。

具体的には、get all referencesとブランチ用フィルタ(refs/heads/...)です。その後、get the latest commit on each branchを呼び出し、親とその親の親をフェッチします。リポジトリのルートに達するまで続きます。

コミットは複数の親を持つことができるので、コミットを線形に格納するだけではなく、グラフを作成する必要があります。

各コミットをフェッチするのは別のWeb要求です。

あなたはrate limited to 5000 requests per hourです。

更新を取得するには、前に見たコミットに達するまでプロセスを繰り返します。これは、コミット情報をどこかに保存する必要があることを意味します。リベースがそれらを変更する可能性があるので、ブランチヘッドのIDだけを格納するだけでは不十分です。


それとも、(ネットワークではなく)ディスクスペースのかなりの部分が保存されますチェックアウト、なしでリポジトリを取得するには、裸のクローン、git clone --bareを行うことができます。その後、通常のGitプロシージャを使用して履歴を調べます。

Gitリポジトリの形式は非常に効率的です。多くの場合、履歴は現在のチェックアウトサイズより大きくないことがよくあります。そのネットワークプロトコルも非常に効率的です。そしてそれはちょうどgit fetch originでそれ自身をアップデートする方法を知っています。


それとも、あなただけの目で簡単に見て欲しい場合は、プロジェクトのGithubのページにCommitsタブを使用します。 For example

+0

ありがとうございました。 Github APIのJava実装は、これを行う簡単な方法のようです。 – Sahana

0

Schwernが指摘したように、コミット履歴リポジトリです。

gitリポジトリの履歴を調べるには、最初にクローンを作成するのが賢明です。履歴のみに興味がある場合は、チェックアウトを省略したり、裸のクローンを作成することができます。

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

がJGitのCloneCommandの詳細については、こちらの記事を参照してください:JGitでは、このようなCloneCommandを使うhttp://www.codeaffine.com/2015/11/30/jgit-clone-repository/

関連する問題