Java ProcessBuilder未执行git checkout 命令

cbeh67ev  于 2022-12-17  发布在  Java
关注(0)|答案(1)|浏览(128)

我想使用ProcessBuilder执行4个命令,但第2个命令无法正常工作。
我的代码:

public static void main(String[] args) {
    String path_prj = "C:\\Users\\asali\\Desktop\\CallRepoCode";
    String origBranch = "frontend";

    ArrayList<String> paths = new ArrayList<>();
    paths.add("server\\src\\main\\java\\org\\classes\\CallManager.java");
    paths.add("server\\src\\main\\java\\org\\classes\\CallUtils.java");
    paths.add("server\\src\\main\\java\\org\\classes\\Main.java");

    String command_1 = "cd " + path_prj;
    String command_2 = " & git checkout " + origBranch;
    String command_3 = " & mkdir updated_cia_files ";
    String command_4 = " ";
    for (String path: paths) {
        command_4 = command_4 + "& copy " + path + " updated_cia_files ";
    }

    String[] command = {"cmd.exe", "/C", command_1, command_2, command_3, command_4 };
    ProcessBuilder processBuilder = new ProcessBuilder(command);

    processBuilder.start();

}

基本上,我想去C:\\Users\\asali\\Desktop\\CallRepoCode并 checkout 到frontend分支。有一个GitHub repo,所以它应该工作。 checkout 后,我想创建一个文件夹,并复制3个文件到该文件夹。
我成功地创建了文件夹并复制了文件;然而,本地回购不向前端分支结帐。

编辑

1.当我在cmd上手动运行命令时,它可以正常工作。
1.当我删除代码中的command_3和command_4时,它会执行git checkout命令。

4nkexdtk

4nkexdtk1#

也许我可以建议你一个其他的解决方案,你可以直接使用jgit和java直接从java做这些任务
例如(未检测)

FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();
repositoryBuilder.setMustExist( true );
repositoryBuilder.setGitDir( ... );
Repository repository = repositoryBuilder.build();

Ref ref = repository.checkout().
    setCreateBranch(true).
    setName("branchName").
    setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK).
    setStartPoint("origin/" + branchName).
    call();

相关问题