我想使用ProcessBuilder执行4个命令,但是第二个命令不能正常工作。
我代码:
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
并签出到frontend
分支。有一个GitHub的回购,所以它应该工作。结帐后,我想创建一个文件夹,并复制3个文件到该文件夹。
我成功创建文件夹并复制文件;但是,本地repo不会检出到前端分支。
编辑
- 我的命令工作时,我手动运行cmd.
- 当我删除代码中的command_3和command_4时,它执行git checkout命令。
也许我可以建议你一个其他的解决方案,你可以直接使用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();