1. 序章

JGitは、Gitバージョン管理システムの軽量で純粋なJavaライブラリの実装であり、リポジトリアクセスルーチン、ネットワークプロトコル、コアバージョン管理アルゴリズムが含まれています。

JGitは、Javaで記述されたGitの比較的フル機能の実装であり、Javaコミュニティで広く使用されています。 JGitプロジェクトはEclipse傘下にあり、そのホームはJGitにあります。

このチュートリアルでは、その操作方法を説明します。

2. 入門

プロジェクトをJGitに接続し、コードの記述を開始する方法はいくつかあります。 おそらく最も簡単な方法は、Mavenを使用することです。統合は、次のスニペットをに追加することで実現されます。 私たちのタグ pom.xml ファイル:

<dependency>
    <groupId>org.eclipse.jgit</groupId>
    <artifactId>org.eclipse.jgit</artifactId>
    <version>4.6.0.201612231935-r</version>
</dependency>

JGitの最新バージョンについては、MavenCentralリポジトリにアクセスしてください。 この手順が完了すると、Mavenは必要なJGitライブラリを自動的に取得して使用します。

OSGiバンドルを好む場合は、p2リポジトリーもあります。 このライブラリを統合する方法について必要な情報を入手するには、 EclipseJGitにアクセスしてください。

3. リポジトリの作成

JGitには、配管磁器の2つの基本レベルのAPIがあります。 これらの用語はGit自体に由来します。 JGitは同じ領域に分かれています。

  • Porcelain API –一般的なユーザーレベルのアクションのフロントエンド(Gitコマンドラインツールと同様)
  • 配管API–低レベルのリポジトリオブジェクトとの直接対話

ほとんどのJGitセッションの開始点は、Repositoryクラスです。 最初に行うことは、新しいRepositoryインスタンスの作成です。

init コマンドを使用すると、空のリポジトリを作成できます。

Git git = Git.init().setDirectory("/path/to/repo").call();

これにより、 setDirectory()に指定された場所に作業ディレクトリを持つリポジトリが作成されます。

cloneRepository コマンドを使用して、既存のリポジトリのクローンを作成できます。

Git git = Git.cloneRepository()
  .setURI("https://github.com/eclipse/jgit.git")
  .setDirectory("/path/to/repo")
  .call();

上記のコードは、JGitリポジトリを path / to /repoという名前のローカルディレクトリに複製します。

4. Gitオブジェクト

すべてのオブジェクトは、GitオブジェクトモデルではSHA-1IDで表されます。 JGitでは、これはAnyObjectIdクラスとObjectIdクラスで表されます。

Gitオブジェクトモデルには、次の4種類のオブジェクトがあります。

  • blob –ファイルデータの保存に使用されます
  • ツリー–ディレクトリ。 他のツリーおよびブロブを参照します
  • commit –単一のツリーを指します
  • tag –コミットを特別なものとしてマークします。 通常、特定のリリースをマークするために使用されます

リポジトリからオブジェクトを解決するには、次の関数のように正しいリビジョンを渡すだけです。

ObjectId head = repository.resolve("HEAD");

4.1. 参照

Ref は、単一のオブジェクト識別子を保持する変数です。 オブジェクト識別子は、任意の有効なGitオブジェクト( blob tree commit tag )にすることができます。

たとえば、headへの参照を照会するには、次のように呼び出すだけです。

Ref HEAD = repository.getRef("refs/heads/master");

4.2. RevWalk

RevWalk は、コミットグラフをウォークし、一致するコミットを次の順序で生成します。

RevWalk walk = new RevWalk(repository);

4.3. RevCommit

RevCommit は、Gitオブジェクトモデルのコミットを表します。 コミットを解析するには、RevWalkインスタンスを使用します。

RevWalk walk = new RevWalk(repository);
RevCommit commit = walk.parseCommit(objectIdOfCommit);

4.4. RevTag

RevTag は、Gitオブジェクトモデルのタグを表します。 RevWalk インスタンスを使用して、タグを解析できます。

RevWalk walk = new RevWalk(repository);
RevTag tag = walk.parseTag(objectIdOfTag);

4.5. RevTree

RevTree は、Gitオブジェクトモデルのツリーを表します。 RevWalk インスタンスは、ツリーの解析にも使用されます。

RevWalk walk = new RevWalk(repository);
RevTree tree = walk.parseTree(objectIdOfTree);

5. 磁器API

JGitには、Gitリポジトリを操作するための低レベルのコードが多数含まれていますが、org.eclipse.jgit.api[のGit磁器コマンドの一部を模倣する高レベルのAPIも含まれています。 X198X]パッケージ。

5.1. AddCommand git-add

AddCommand を使用すると、次の方法でファイルをインデックスに追加できます。

  • addFilepattern ()

磁器APIを使用して一連のファイルをインデックスに追加する方法の簡単な例を次に示します。

Git git = new Git(db);
AddCommand add = git.add();
add.addFilepattern("someDirectory").call();

5.2. CommitCommand git-commit

CommitCommand を使用すると、コミットを実行でき、次のオプションを使用できます。

  • setAuthor ()
  • setCommitter ()
  • setAll ()

磁器APIを使用してコミットする方法の簡単な例を次に示します。

Git git = new Git(db);
CommitCommand commit = git.commit();
commit.setMessage("initial commit").call();

5.3. TagCommand git-tag

TagCommand は、さまざまなタグ付けオプションをサポートしています。

  • setName ()
  • setMessage ()
  • setTagger ()
  • setObjectId ()
  • setForceUpdate ()
  • setSigned ()

PorcelainAPIを使用してコミットにタグを付ける簡単な例を次に示します。

Git git = new Git(db);
RevCommit commit = git.commit().setMessage("initial commit").call();
RevTag tag = git.tag().setName("tag").call();

5.4. LogCommand git-log

LogCommand を使用すると、コミットグラフを簡単にたどることができます。

  • add(AnyObjectId start)
  • addRange(AnyObjectId since、AnyObjectId until)

ログメッセージを取得する方法の簡単な例を次に示します。

Git git = new Git(db);
Iterable<RevCommit> log = git.log().call();

6. Antタスク

JGitには、org.eclipse.jgit.antバンドルに含まれるいくつかの一般的なAntタスクもあります。

これらのタスクを使用するには:

<taskdef resource="org/eclipse/jgit/ant/ant-tasks.properties">
    <classpath>
        <pathelement location="path/to/org.eclipse.jgit.ant-VERSION.jar"/>
        <pathelement location="path/to/org.eclipse.jgit-VERSION.jar"/>
        <pathelement location="path/to/jsch-0.1.44-1.jar"/>
    </classpath>
</taskdef>

これにより、 git-clone、git-init 、およびgit-checkoutタスクが提供されます。

6.1. git-clone

<git-clone uri="http://egit.eclipse.org/jgit.git" />

次の属性が必要です。

  • uri :クローン元のURI

次の属性はオプションです。

  • dest :クローンの宛先(デフォルトでは、 URI の最後のパスコンポーネントに基づいて人間が読めるディレクトリ名を使用します)
  • bare true / false / yes / no は、複製されたリポジトリを裸にするかどうかを示します(デフォルトは false
  • branch :リポジトリのクローンを作成するときにチェックアウトする最初のブランチ(デフォルトは HEAD

6.2. git-init

<git-init />

git-initタスクを実行するために属性は必要ありません。

次の属性はオプションです。

  • dest :gitリポジトリが初期化されるパス(デフォルトは $ GIT_DIR または現在のディレクトリ)
  • bare true / false / yes / no は、リポジトリを裸にするかどうかを示します(デフォルトはfalse

6.3. git-checkout

<git-checkout src="path/to/repo" branch="origin/newbranch" />

次の属性が必要です。

  • src :gitリポジトリへのパス
  • branch :チェックアウトする最初のブランチ

次の属性はオプションです。

  • createbranch true / false / yes / no は、ブランチを作成する必要があるかどうかを示します。まだ存在していません(デフォルトは false
  • force true / false / yes / no :if true / [ X88X] yes で、指定された名前のブランチがすでに存在する場合、既存のブランチの開始点は新しい開始点に設定されます。 false の場合、既存のブランチは変更されません(デフォルトは false

7. 結論

高レベルのJGitAPIを理解するのは難しくありません。 使用するgitコマンドがわかっている場合は、JGitで使用するクラスとメソッドを簡単に推測できます。

ここで利用可能なすぐに実行できるJGitコードスニペットのコレクションがあります。

それでも問題や質問がある場合は、ここにコメントを残すか、JGitコミュニティにサポートを依頼してください。