【发布时间】:2019-04-21 22:42:17
【问题描述】:
我正在尝试使用这个命令:
git checkout `git rev-list -n 1 --before="2009-07-27 13:37" master`
我正在通过 ProcessBuilder 运行。现在,我知道我的其余代码可以正常工作,因为我已经用其他示例对其进行了测试。但我不确定如何拆分此命令以使其适用于 ProcessBuilder。
显然,这个方法不起作用:
String[] command = {"git", "checkout", "`git rev-list -n 1 --before=\"2014-01-01 12:00\" master`"};
这也不起作用:
String[] command = {"git", "checkout", "`git", "rev-list", "-n", "1", "--before=\"2014-01-01 12:00\"", "master`"};
我也没有从控制台获得任何输出(我使用 InputStream),这意味着我更难找出问题所在。我认为这个问题对于熟悉 ProcessBuilders 的人来说应该是显而易见的,所以是的......
我的其余代码如下所示:
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.directory(new File(fullPath));
process = processBuilder.start();
并且我检查过的目录路径应该是正确的(它在存储库的主目录中)。
如果我需要提供代码的其他部分,我会提供。
【问题讨论】:
-
快速回答是您需要先运行
git rev-list...命令,使用ProcessBuilder捕获其输出并将其作为参数传递给您的git checkout命令。我会跟进一个很长的答案:) -
谢谢,它有效!一旦你写下来,我仍然会阅读你的完整回复。我需要弄清楚如何连续两次使用 ProcessBuilder。
-
反引号只能被 bash 这样的 shell 理解。 Java(如 C)直接运行命令,不使用任何 shell,因此反引号(以及所有其他引号,以及重定向符号)在任何方面都没有特殊。
-
不,我有一个稍微不同的问题。在另一篇文章中,我的问题是 ProcessBuilder 或我使用的命令不喜欢字符串末尾的额外空格。在这篇文章中,我问的是如何在 ProcessBuilder 中使用循环 git 函数。由于我是 StackOverflow 社区的新手,因此我不会删除我的帖子,以防有人遇到类似问题。但是,如果这意味着人们会查看我的帖子来回答他们,那么我可能应该删除已解决的案例,以免引起额外的关注并浪费某人的时间。
标签: java terminal processbuilder