问题来源:在做一个同步工具(用于同步本地磁盘与挂载映射磁盘的代码)时,需要展示本地代码的分支名。
解决方案
1.通过访问文件目录(.git/HEAD)中的字符串,并解析出来。
2.在代码中调用JGit的接口,获取当前git的分支名。
JGit是什么
JGit 提供了一个Git 命令的Java API,例如,你可以在 JGit 里面用
git.commit().setMessage( "My first commit" ).call();
代替 git commit -m "First commit"
JGit 命令都有一个 call() 方法,在命令被建立之后用来实际执行它。这些类的命名是在各自的 Git 命令后加上后缀命令。虽然有些命令提供一个公共构造函数,还是建议使用 Git 的工厂类来创建命令。
JGit的jar获取
1.在idea中,通过File->Project Structure>Project Setting进入maven搜索library
2.在Maven搜索中输入关键词jgit,可以得到如下结果
注意:理论上选哪个包都是ok的,但经过我测试,最好是org.eclipse.jgit:org.eclipse.jgit.ui.的jar包,不然生成jar包时会有不兼容问题。
通过JGit获取当前分支名
public static String getGitBranch(String gitPath) {
try {
Repository existingRepo = new FileRepositoryBuilder().setGitDir(new File(gitPath + "\\.git")).build();
return existingRepo.getBranch();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
总结
除了Repository.getBranch()之外,还有很多其他Git操作,创建一个存储库,从远程获取内容,向历史版本中添加和删除文件,检查历史操作,并最终将更改的文件推回到原始存储库都可以用JGit实现。大家可以参考官网的API或者JGit资源介绍。