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もしくはテストコードから使い方を読み取る必要がありますね。