【问题标题】:JGit how to check if branch is merged into masterJGit如何检查分支是否合并到master
【发布时间】:2019-03-20 15:12:46
【问题描述】:

代码迁移过程 - GitHub - 概述

  1. 开发人员创建分支、编写代码等
  2. 开发人员在工作完成后提交分支
  3. 生产迁移 - 开发人员执行拉取请求以将分支拉入主节点。
  4. 完成两次审批后,开发者可以合并代码
  5. 开发人员将代码合并到主代码中
  6. Git 在生产环境中运行以克隆存储库 master...我正在编写一个自定义程序,使用 JGit 来验证是否已完成合并到 master。
  7. 代码已部署到生产中

问题:

我正在尝试以编程方式检查开发人员是否已将他们的代码合并到 master 中。我无法让这一步工作。我查看过的所有示例都提交到分支和主控。此后,示例随后检查分支是否已提交。这对我的程序来说不是一个可行的选择,因为在批准完成后合并发生在 GitHub 中。

当我克隆存储库 JGit 并尝试检查是否已合并其他分支时,解析提交失败并返回 null。反之亦然,如果我克隆分支并检查 master 是否有提交失败。很明显,我在这里做错了什么。我正在谈论的示例代码:

try( RevWalk revWalk = new RevWalk( repository ) ) {
  RevCommit masterHead = revWalk.parseCommit( repository.resolve( "refs/heads/master" );
  RevCommit otherHead = revWalk.parseCommit( repository.resolve( "refs/heads/other-branch" );
  if( revWalk.isMergedInto( otherHead, masterHead ) ) {
   ...
  }
}

我也尝试查看存储库状态,但这也不起作用。如果有人除了使用 git 命令行工具之外还有其他想法,我将不胜感激。

其他信息

Java 版本 1.7 - 这是我们生产的版本。
Jar 版本 - org.eclipse.jgit-4.5.4.201711221230-r.jar

我查看的示例:

https://gist.github.com/rherrmann/433adb44b3d15ed0f0c7

https://www.codeaffine.com/2015/12/15/getting-started-with-jgit/

How to merge in JGit?

How to determine with JGit which branches have been merged to master?

我的代码

public class GitHubTest
{
  public Repository repository;

  public GitHubTest()
  {
  }

  public static ArrayList<String> fetchGitBranches(String gitUrl)
  {
     Collection<Ref> refs;
     ArrayList<String> branches = new ArrayList<String>();
     try {
        refs = Git.lsRemoteRepository().setHeads(true)
        .setRemote(gitUrl)
        .setCredentialsProvider(new UsernamePasswordCredentialsProvider("token", "not applicable stack exchange"))
        .call();
        for (Ref ref: refs) {
           branches.add(ref.getName().substring(ref.getName().lastIndexOf("/") + 1, ref.getName().length()));
           System.out.println(ref.getName());
        }
        Collections.sort(branches);
     } catch (InvalidRemoteException e) {
        e.printStackTrace();
     } catch (TransportException e) {
        e.printStackTrace();
     } catch (GitAPIException e) {
        e.printStackTrace();
     }
     return branches;
  }



  public void getRepositoryCode()
  {
     try {
        Git git = 
           Git.cloneRepository()
           .setURI("https://github.com/FICOCorp/iww-test-create-1552931848516.git")
           .setCredentialsProvider(new UsernamePasswordCredentialsProvider("token", "not applicable stack exchange"))
           .setBranch("IKE_TEST2")
           .setDirectory(new File("C:\\z_git")).call();
     } catch (TransportException e) {
        e.printStackTrace();
     } catch (InvalidRemoteException e) {
        e.printStackTrace();
     } catch (GitAPIException e) {
        e.printStackTrace();
     }
  }

  public void setRespository(String repo)
  {
     try {

        FileRepositoryBuilder builder = new FileRepositoryBuilder();
        repository = 
         builder.findGitDir(new File(repo)).readEnvironment()
        .build();
        
     } catch (Exception e) {
        e.printStackTrace();
     }
  }

  public void isBranchMerged( String branch)
  {
     try {
        Git git = new Git(repository);
        
        System.out.println("git.getRepository().getFullBranch()  ="+git.getRepository().getFullBranch()  );
        RepositoryState r =  git.getRepository().getRepositoryState();

        System.out.println("r.canCommit();  =" + r.canCommit());
        //System.out.println("r.canCommit();  ="+r. );

        if (r == RepositoryState.MERGING) {
           System.out.println("RepositoryState.MERGING = Y");
        }
        else {
           System.out.println("RepositoryState.MERGING = N");
        }
        if (r == RepositoryState.MERGING_RESOLVED) {
           System.out.println("RepositoryState.MERGING_RESOLVED = Y");
        }
        else {
           System.out.println("RepositoryState.MERGING_RESOLVED = N");
        }
        Ref master = repository.findRef("master");

        // Get the object the reference points to
        ObjectId masterTip = master.getObjectId();
     } catch (Exception e) {
        e.printStackTrace();
        System.out.println( e.getMessage());
     }
  }


  public static void main(String[] args)
  {
     GitHubTest gitHubTest = new GitHubTest();
     gitHubTest.getRepositoryCode();

     ArrayList<String> al = gitHubTest.fetchGitBranches("https://github.com/FICOCorp/iww-test-create-1552931848516.git");

     for (String s: al) {
        System.out.println("Known Branches " + s);

     }
     //gitHubTest.getRepositoryDetails();
     gitHubTest.setRespository("C:\\z_git\\.git");
     gitHubTest.isBranchMerged("IKE_TEST2");
     //gitHubTest.listUncommittedChanges();
  }
}

截图

【问题讨论】:

    标签: github merge jgit


    【解决方案1】:

    JGit 无法做到这一点。解决方案是调用 GitHub 中的 REST API,特别是“拉”请求服务。

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 2018-12-23
      • 2015-01-31
      • 2020-08-01
      • 2018-04-14
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多