如何使用jGit生成与git log格式一致的标准提交日志
jGit 实现原生
git log格式输出方案 你可以通过拼接RevCommit对象的多个属性,输出和原生git log完全一致的格式,具体实现如下:
核心字段获取对应方法
你需要从RevCommit实例中获取以下几个核心字段:
- 提交完整哈希:调用
commit.getName()方法直接获取 - 作者信息:通过
commit.getAuthorIdent()方法拿到身份对象,再分别调用getName()、getEmailAddress()获取用户名和邮箱 - 提交时间:同样从
commit.getAuthorIdent().getWhen()拿到时间对象,需要按git log默认格式做格式化 - 提交内容:直接用你已经知道的
commit.getFullMessage(),只要给每行行首加4个空格缩进即可
格式化代码示例
import org.eclipse.jgit.revwalk.RevCommit; import java.text.SimpleDateFormat; import java.util.Locale; public class GitLogFormatter { // 匹配git log原生时间格式,指定英文Locale避免月份/星期本地化 private static final SimpleDateFormat GIT_LOG_DATE_FORMAT = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy Z", Locale.ENGLISH); public static String formatCommit(RevCommit commit) { StringBuilder logBuilder = new StringBuilder(); // 拼接提交哈希行 logBuilder.append("commit ").append(commit.getName()).append("\n"); // 拼接作者行 logBuilder.append("Author: ") .append(commit.getAuthorIdent().getName()) .append(" <") .append(commit.getAuthorIdent().getEmailAddress()) .append(">\n"); // 拼接时间行 logBuilder.append("Date: ") .append(GIT_LOG_DATE_FORMAT.format(commit.getAuthorIdent().getWhen())) .append("\n"); // 空一行和提交内容分隔 logBuilder.append("\n"); // 提交内容每行前加4个空格 String[] msgLines = commit.getFullMessage().split("\\R"); for (String line : msgLines) { logBuilder.append(" ").append(line).append("\n"); } return logBuilder.toString(); } }
如果需要输出和示例完全一致的完整日志,只需要遍历所有提交的格式化结果,在最开头加一行$ git log再加两个换行即可。
内容的提问来源于stack exchange,提问作者Brad Turek
相关产品推荐
相关产品推荐

