我已经研究过从Java控制Git的可能性。 我发现的是:
Runtime.getRuntime().exec("git command")
- 使用git 我尝试使用Runtime和ProcessBuilder为git编写自己的Java包装器,但是我遇到了进程线程的问题,等待线程完成一些时间。
然后我研究了其他API解决方案。首先我尝试了JavaGit API,但我根本无法工作。
其次我测试了JGit API,看起来很棒。但我很快就发现我无法像使用Java包装器那样设置提交日期:
ProcessBuilder pb = new ProcessBuilder("git", "commit", "--date=" + "\"" + customDateString + "\"", "-m \"" + comment + "\"");
我下载了JGit源代码以查看是否可以实现它,但是读取的内容太多了,我在Github上找不到任何问题跟踪器,以便JGit提出建议。
有人可以帮我这样做吗? 或者告诉我在哪里可以写信给开发人员提出建议?
答案 0 :(得分:5)
很简单,如你所说,首先下载jgit:
C:\> cd C:\Users\VonC\prog\git\
C:\Users\VonC\prog\git> git clone https://github.com/eclipse/jgit
C:\Users\VonC\prog\git> cd jgit
然后搜索涉及" tst
"的测试(' authordate
'):
C:\Users\VonC\prog\git\jgit>grep -nRHIi authordate *|grep tst
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java:446: final Date authorDate = new Date(1349621117000L);
这意味着您可以查看org.eclipse.jgit.test.tst.org.eclipse/jgit/api.CommitCommandTest,函数commitAmendWithoutAuthorShouldSetOriginalAuthorAndAuthorTime()
:
您将看到如何指定作者和作者日期:
final Date authorDate = new Date(1349621117000L);
PersonIdent firstAuthor = new PersonIdent(authorName, authorEmail,
authorDate, TimeZone.getTimeZone("UTC"));
git.commit().setMessage("initial commit").setAuthor(firstAuthor).call();
注意,as I mention here,测试类是JGit文档/插图的良好来源。
答案 1 :(得分:1)
前段时间我遇到了类似的问题,因为JavaGit项目似乎有点死了,只是分叉了它,解决了一些错误,让一些东西重新开始工作。
您可以在the Swiss Army Java Git page试用,也很乐意为您提供帮助。