JavaからGit

Javaからプログラム内でGitをたたくサンプル。EclipseのGitクライアントプラグインEGit内部で用いられている、JGitを使います。


JGitのライブラリがMavenで提供されているので、pom.xmlに以下を追加します。

  <repositories>

    <!-- JGit repository -->
    <repository>
      <id>jgit-repository</id>
      <url>http://download.eclipse.org/jgit/maven</url>
    </repository>

  </repositories>

  <dependencies>

    <!-- Core Library -->
    <dependency>
      <groupId>org.eclipse.jgit</groupId>
      <artifactId>org.eclipse.jgit</artifactId>
      <version>0.8.4</version>
    </dependency>

  <!-- Smart HTTP Servlet -->
    <dependency>
      <groupId>org.eclipse.jgit</groupId>
      <artifactId>org.eclipse.jgit.http.server</artifactId>
      <version>0.8.4</version>
    </dependency>

  <!-- AWT UI Helpers -->
    <dependency>
      <groupId>org.eclipse.jgit</groupId>
      <artifactId>org.eclipse.jgit.ui</artifactId>
      <version>0.8.4</version>
    </dependency>

  <!-- JUnit Test Support -->
    <dependency>
      <groupId>org.eclipse.jgit</groupId>
      <artifactId>org.eclipse.jgit.junit</artifactId>
      <version>0.8.4</version>
    </dependency>

  </dependencies>

で、とりあえず git add/commit/log ぐらいをやってみます。

public static void main(String[] args) throws Exception {
  Repository repos = new Repository(new File("repos/" + Constants.DOT_GIT));

  // git add
  GitIndex index = repos.getIndex();
  index.add(repos.getWorkDir(), new File(repos.getWorkDir(), "test.txt"));
  index.write();

  // git commit
  Git git = new Git(repos);
  CommitCommand commit = git.commit();
  commit.setMessage("コミット : " + new Date());
  commit.call();

  // git log
  LogCommand log = git.log();
  for (RevCommit revCommit : log.call()) {
    System.out.println(revCommit.getFullMessage());
  }

  repos.close();
}

ただし「GitIndexはDeprecatedなので、DirCacheを使え」とJavadocにあります。DirCacheの使い方が分からなかったのは内緒・・・orz


まだ正式なドキュメントが用意されていないので、Javadocもしくはテストコードから使い方を読み取る必要がありますね。