JGit 切换分支

JGit切换分支的时候,有两种情况,一种是在本地已修建过这个分支,一种是本地没有这个分支,需要从远程拉取。如下面代码所示:

 /**
     * 
     * <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();
        }
    }

 

posted @ 2019-01-29 16:15  王广帅  阅读(3571)  评论(0编辑  收藏  举报