JGitガイド
1. 前書き
JGitは、リポジトリアクセスルーチン、ネットワークプロトコル、コアバージョン管理アルゴリズムなど、Gitバージョン管理システムの軽量で純粋なJavaライブラリ実装です。
JGitは、Javaで記述されたGitの比較的フル機能の実装であり、Javaコミュニティで広く使用されています。 JGitプロジェクトはEclipseの傘下にあり、そのホームはJGitにあります。
このチュートリアルでは、その操作方法について説明します。
2. 入門
プロジェクトをJGitに接続してコードの作成を開始する方法はいくつかあります。 おそらく最も簡単な方法はMavenを使用することです。統合は、pom.xmlファイルの<dependencies>タグに次のスニペットを追加することで実現されます。
org.eclipse.jgit
org.eclipse.jgit
4.6.0.201612231935-r
JGitの最新バージョンについては、Maven Central repositoryにアクセスしてください。 この手順が完了すると、Mavenは必要なJGitライブラリを自動的に取得して使用します。
OSGiバンドルを好む場合は、p2リポジトリもあります。 このライブラリを統合する方法について必要な情報を入手するには、Eclipse JGitにアクセスしてください。
3. リポジトリの作成
JGitには、plumbingとporcelainの2つの基本レベルのAPIがあります。 これらの用語はGit自体に由来します。 JGitは同じ領域に分かれています。
-
porcelain API –一般的なユーザーレベルのアクションのフロントエンド(Gitコマンドラインツールと同様)
-
plumbing 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-1 IDで表されます。 JGitでは、これはAnyObjectIdクラスとObjectIdクラスで表されます。
Gitオブジェクトモデルには4つのタイプのオブジェクトがあります。
-
blob –ファイルデータの保存に使用
-
tree –ディレクトリ。他のtreesとblobsを参照します
-
commit –単一のツリーを指します
-
tag –コミットを特別なものとしてマークします。通常、特定のリリースをマークするために使用されます
リポジトリからオブジェクトを解決するには、次の関数のように正しいリビジョンを渡すだけです。
ObjectId head = repository.resolve("HEAD");
4.1. Ref
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パッケージのGitporcelainコマンドの一部を模倣する高レベルのAPIも含まれています。
5.1. AddCommand(git-add)
AddCommandを使用すると、次の方法でファイルをインデックスに追加できます。
-
addFilepattern()
porcelainAPIを使用してファイルのセットをインデックスに追加する方法の簡単な例を次に示します。
Git git = new Git(db);
AddCommand add = git.add();
add.addFilepattern("someDirectory").call();
5.2. CommitCommand(git-commit)
CommitCommandを使用すると、コミットを実行でき、次のオプションを使用できます。
-
setAuthor()
-
setCommitter()
-
setAll()
porcelainAPIを使用してコミットする方法の簡単な例を次に示します。
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 log = git.log().call();
6. Antタスク
JGitには、org.eclipse.jgit.antバンドルに含まれるいくつかの一般的なAntタスクもあります。
これらのタスクを使用するには:
これにより、git-clone, git-initおよびgit-checkoutタスクが提供されます。
6.1. git-clone
次の属性が必要です。
-
uri:クローンを作成するURI
次の属性はオプションです。
-
dest:クローンを作成する宛先(デフォルトでは、URIの最後のパスコンポーネントに基づいて人間が読めるディレクトリ名を使用します)
-
bare:true /false /yes /noは、複製されたリポジトリをベアにするかどうかを示します(デフォルトはfalse)
-
branch:リポジトリのクローンを作成するときにチェックアウトする最初のブランチ(デフォルトはHEAD)
6.2. git-init
git-initタスクを実行するために属性は必要ありません。
次の属性はオプションです。
-
dest:gitリポジトリが初期化されるパス(デフォルトは$GIT_DIRまたは現在のディレクトリ)
-
bare:true /false /yes /noは、リポジトリをベアにするかどうかを示します(デフォルトはfalse)
6.3. git-checkout
次の属性が必要です。
-
src:gitリポジトリへのパス
-
branch:チェックアウトする最初のブランチ
次の属性はオプションです。
-
createbranch:true /false /yes /noは、ブランチがまだ存在しない場合に作成する必要があるかどうかを示します(デフォルトはfalse) s)
-
force:true /false /yes /no:true /yesの場合、および指定された名前のブランチが既に存在する場合、既存のブランチの開始点は新しい開始点に設定されます。 falseの場合、既存のブランチは変更されません(デフォルトはfalse)
7. 結論
高レベルのJGit APIを理解するのは難しくありません。 使用するgitコマンドがわかれば、JGitで使用するクラスとメソッドを簡単に推測できます。
すぐに実行できるJGitコードスニペットのコレクションが利用可能なhereにあります。
それでも問題や質問がある場合は、ここにコメントを残すか、JGit communityにサポートを依頼してください。