JGit切换分支的时候,有两种状况,一种是在本地已修建过这个分支,一种是本地没有这个分支,须要从远程拉取。以下面代码所示:java
/** * * <p> * Description:判断本地分支名是否存在 * </p> * * @param git * @param branchName * @return * @throws GitAPIException * @author wgs * @date 2019年7月20日 下午2:49:46 * */ public boolean branchNameExist(Git git, String branchName) throws GitAPIException { List<Ref> refs = git.branchList().call(); for (Ref ref : refs) { if (ref.getName().contains(branchName)) { return true; } } return false; } /** * * <p>Description:切换分支,并拉取到最新 </p> * @param repoDir * @param branchName * @author wgs * @date 2019年7月20日 下午4:11:45 * */ public void checkoutAndPull(String repoDir, String branchName) { try { Repository existingRepo = new FileRepositoryBuilder().setGitDir(new File(repoDir)).build(); Git git = new Git(existingRepo); try { if (this.branchNameExist(git, branchName)) {//若是分支在本地已存在,直接checkout便可。 git.checkout().setCreateBranch(false).setName(branchName).call(); } else {//若是分支在本地不存在,须要建立这个分支,并追踪到远程分支上面。 git.checkout().setCreateBranch(true).setName(branchName).setStartPoint("origin/" + branchName).call(); } git.pull().call();//拉取最新的提交 } finally { git.close(); } } catch (IOException | GitAPIException e) { e.printStackTrace(); } }