在构建过程中,我尝试使用PHING检出git存储库。 PHING使用pear / versioncontrol_git处理git任务。我的git路径是Map<Integer, List<Integer>> result = list.stream()
.collect(Collectors.groupingBy(A::getId,
Collectors.mapping(A::getB, Collectors.collectingAndThen(Collectors.toList(),
l -> l.stream().flatMap(List::stream).map(B::getId).collect(Collectors.toList())))));
。
使用此路径运行两个命令C:\Program Files\Git\bin\git.exe
和<gitpath> --version
<gitpath> clone -q -repo=...
工作正常。 <gitpath> --version
给出一个错误,指出<gitpath> clone...
不是有效路径。我感到困惑,为什么当完全相同的代码可以正确执行C:\Program
命令时,这将是一个问题。
似乎正在发生的情况是引号被剥夺了,但只是有时。
这是令人反感的代码:
--version
这是两次调用代码的输出:
public function execute($arguments = array(), $options = array())
{
$command = $this->createCommandString($arguments, $options);
$descriptorspec = array(
1 => array('pipe', 'w'),
2 => array('pipe', 'w'),
);
$pipes = array();
$resource = proc_open($command, $descriptorspec, $pipes, realpath($this->git->getDirectory()));
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
foreach ($pipes as $pipe) {
fclose($pipe);
}
$status = trim(proc_close($resource));
if ($status) {
$message = "Some errors in executing git command . $command\n\n"
. "Output:\n"
. $stdout."\n"
. "Error:\n"
. $stderr;
var_dump($message);
throw new VersionControl_Git_Exception($message);
} else {
var_dump('No errors in ' . $command);
}
return $this->stripEscapeSequence($stdout);
}
答案 0 :(得分:1)
您的问题不是--version引起的,而是您执行 git clone 或 git checkout 所执行的命令的问题。
您不能使用 git.exe
运行 git clone 命令或 git checkout 命令当可以使用 git.exe 运行-version 命令时,该命令为“ C:/ Program Files / Git / bin / git.exe” --version
因此,结论是您必须在运行git clone或git checkout时设置命令,
“ C:/ Program Files / Git / bin>” git clone 要么 “ C:/ Program Files / Git / bin>” git checkout
让我知道您是否仍然对此有疑问。
谢谢。