Skip to content

读取Git修改

约 564 字大约 2 分钟

JavaGit

2025-03-26

现在需要在Java命令中读取Git相关命令,获取用户名、提交日期、提交分支、提交描述、提交代码相关信息。

Git命令

读取日志

在git中,读取命令如下

git log -1
image-20250331100732093
image-20250331100732093

我们可以从中提取相关信息


占位符含义
%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);
    }
image-20250331092034073
image-20250331092034073

读取提交代码

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

image-20250331100627725
image-20250331100627725

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);

贡献者

  • flycodeuflycodeu

公告板

2025-03-04正式迁移知识库到此项目