读取Git修改
现在需要在Java命令中读取Git相关命令,获取用户名、提交日期、提交分支、提交描述、提交代码相关信息。
读取日志
在git中,读取命令如下
git log -1

我们可以从中提取相关信息
占位符 | 含义 |
---|---|
%H | 提交的完整哈希值 |
%h | 提交的简短哈希值 |
%an | 作者姓名 |
%ae | 作者邮箱 |
%cn | 提交者姓名(Committer Name) |
%ce | 提交者邮箱(Committer Email) |
%s | 提交信息的主题(第一行) |
%b | 提交信息的正文 |
%cd | 提交日期 |
%cr | 提交日期的相对时间 |
以获取用户名为例
git log -1 --pretty=format:'%an'
通过以上命令即可实现获取用户提交相关信息
读取用户名、提交日期、提交描述、提交哈希值
在java中,可以使用ProcessBuilder来运行相关命令。
1. 编写通用方法
只需要传入占位符
public String getGitInfo(String tags) throws IOException {
ProcessBuilder logProcessBuilder = new ProcessBuilder("git", "log", "-1", "--pretty=format:" + tags);
logProcessBuilder.directory(new File("."));
Process logProcess = logProcessBuilder.start();
BufferedReader logReader = new BufferedReader(new InputStreamReader(logProcess.getInputStream()));
return logReader.readLine();
}
2. 获取基础信息
public void testGetGitConfig() throws IOException, InterruptedException {
// 1. 作者名
String author = getGitInfo("%an");
System.out.println("Author: " + author);
// 2. 日期
String date = getGitInfo("%cd");
System.out.println("Date: " + date);
// 3. 描述
String description = getGitInfo("%s");
System.out.println("Description: " + description);
// 4. 哈希值,用于获取提交代码
String hashCode = getGitInfo("%h");
System.out.println("Hash Code: " + hashCode);
}

读取提交代码
我们需要使用git中的diff命令,结合哈希值获取历史提交命令

1. 编写通用方法
需要获取最后一次提交的哈希值,通过diff命令获取上一次提交的历史文件
public String getDiffCode(String lastCommitHash) throws Exception {
// 1. 读取Git Diff更改记录
ProcessBuilder diffProcessBuilder = new ProcessBuilder("git", "diff", lastCommitHash + "^", lastCommitHash);
diffProcessBuilder.directory(new File("."));
Process process = diffProcessBuilder.start();
// 读取输出流
BufferedReader diffReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
StringBuilder processOutput = new StringBuilder();
while ((line = diffReader.readLine()) != null) {
processOutput.append(line).append("\n");
}
// 2. 获取退出码
int exitCode = process.waitFor();
if (exitCode != 0) {
throw new Exception("Diff process exited with code " + exitCode);
}
return processOutput.toString();
}
2. 获取历史提交文件
// 5. 获取提交代码
String diffCode = getDiffCode(hashCode);
System.out.println(diffCode);
贡献者
flycodeu
版权所有
版权归属:flycodeu