JGit使用
添加pom依赖
<!--JGit start--> <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> <version>4.8.0.201706111038-r</version> </dependency> <!--JGit end-->git clone
/** * git clone * * @param remoteUrl git地址 * @param repoDir 本地仓库地址 */ public static void gitClone(String remoteUrl, File repoDir){ try{ Git git = Git.cloneRepository() .setURI(remoteUrl) .setDirectory(repoDir) .call(); logger.info("Cloning from " + remoteUrl + " to " + git.getRepository()); }catch(Exception e){ logger.error(e.getMessage()); } } @Test public void gitClone() throws Exception{ //http & ssh都可以用 // String url = "[email protected]:demo/demo.git"; String url = "http://gitlab.corp.qunar.com/zhanghe.zhang/springboot_homework.git"; File repoDir = new File("/home/download"); JGitUtil.gitClone(url, repoDir); }git checkout切换分支
/** * 切换分支 * * @param repoDir * @param version */ public static void gitCheckout(File repoDir, String version){ File repoGitDir = new File(repoDir.getAbsolutePath() + "/.git"); if (!repoGitDir.exists()){ logger.info("Error! Not Exists : " + repoGitDir.getAbsolutePath()); }else{ Repository repo = null; try{ repo = new FileRepository(repoGitDir.getAbsolutePath()); Git git = new Git(repo); CheckoutCommand checkout = git.checkout(); checkout.setName(version); checkout.call(); logger.info("Checkout to " + version); }catch(Exception e){ logger.info(e.getMessage() + " : " + repoGitDir.getAbsolutePath()); }finally{ if (repo != null){ repo.close(); } } } }git diff
/** * * @param repoDir 本地仓库地址 * @param branch1 分支名称 * @param branch2 分支名称 */ public static void gitDiff(File repoDir,String branch1,String branch2) { File repoGitDir = new File(repoDir.getAbsolutePath() + "/.git"); if (!repoGitDir.exists()) { logger.info("Error! Not Exists : " + repoGitDir.getAbsolutePath()); } else { try { Git git = Git.open(repoGitDir); Repository repository = git.getRepository(); ObjectReader reader = repository.newObjectReader(); CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); try { //分支1 ObjectId old = repository.resolve(branch1 + "^{tree}"); //分支2 ObjectId head = repository.resolve(branch2+"^{tree}"); oldTreeIter.reset(reader, old); CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); newTreeIter.reset(reader, head); List<DiffEntry> diffs= git.diff() .setNewTree(newTreeIter) .setOldTree(oldTreeIter) .call(); ByteArrayOutputStream out = new ByteArrayOutputStream(); DiffFormatter df = new DiffFormatter(out); df.setRepository(repository); for (DiffEntry diffEntry : diffs) { df.format(diffEntry); logger.info("diffEntry:{}",diffEntry.toString()); logger.info("--------------------------------------------"); String diffText = out.toString("UTF-8"); logger.info("diffText:{}",diffText); out.reset(); } } catch (IncorrectObjectTypeException e) { logger.error(e.getMessage()); } catch (IOException e) { logger.error(e.getMessage()); } catch (GitAPIException e) { logger.error(e.getMessage()); } } catch (Exception e) { logger.error(e.getMessage() + " : " + repoDir.getAbsolutePath()); } } }
| CanonicalTreeParser | |
|---|---|
| CanonicalTreeParser extends AbstractTreeIterator | 将文本/二进制格式解析为Git树 |
| public void reset(final ObjectReader reader, final AnyObjectId id) | 重置解析器,遍历给定的树 |
git diff 解释器
- 第一行是 Git Diff 的 header,进行比较的是 a 版本的 f1(变动前)和b 版本的f1(变动后)
- 第二行是两个版本的 hash 值以及文件模式(100644 表示是文本文件)
- 第三、四行表示进行比较的两个文件,--- 表示变动前的版本,+++ 表示变动后的版本
- 第五行是一个 thunk header(可能会有多个),提供变动的"上下文"(context),-8,11 表示接下来展示变动前文件第八行开始,共显示十一行,+8,7 表示接下来展示变动后文件第八开始,共显示第十二行
- 接下来的几行就是具体的变动内容.它将两个文件的上下文合并显示在一起,每一行前面是一个标志位,''(空)表示无变化(是一个上下文行)、- 表示变动前文件删除的行、+ 表示变动后文件新增的行
diff --git a/data_center/pom.xml b/data_center/pom.xml
index 454d9e6..c1dcac0 100644
--- a/data_center/pom.xml
+++ b/data_center/pom.xml
@@ -8,11 +8,12 @@
<parent>
<groupId>com.qunar.fuwu</groupId>
<artifactId>audiebant_platform</artifactId>
- <version>0.0.11</version>
+ <version>0.0.14</version>
</parent>
<artifactId>data_center</artifactId>
<packaging>war</packaging>
+ <version>0.0.14</version>
<properties>
<kotlin.version>1.0.1</kotlin.version>
@@ -87,7 +88,7 @@
<dependency>
<groupId>com.qunar.fuwu</groupId>
<artifactId>data_center_api</artifactId>
- <version>0.0.11</version>
+ <version>0.0.14</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>