我需要在子进程中运行 gitbranch 命令,但我只想获取当前 checkout 的分支。该命令在终端中工作:
git branch | grep \* | cut -d ' ' -f2
我有很多帖子试图做类似的事情,但我对 Unix 命令的理解还不足以得到解决方案。
我已经尝试了很多其他方法:
spawn("git", ["branch | grep \* | cut -d ' ' -f2"], opts)
这就是我。从标准错误获取:
git: 'branch | grep * | cut -d ' ' -f2' is not a git command. See 'git --help'.
最佳答案
Shell 命令有很多语法: a | b | c
并不意味着“运行命令 a | b | c
”,而是“运行命令 a
,使用一堆胶水使其通过管道输出;运行命令 b
,使用一堆胶水使其读取早期的管道输出作为其输入,并对其输出进行管道传输;然后运行命令 c
,并使用一堆胶水使其读取 b
的管道输出”。
您可以在代码中复制所有这些胶水,但是 git branch | grep \* | cut -d ' ' -f2
首先这是错误的做法。相反,请使用以下两个命令之一:
git symbolic-ref --short HEAD
git rev-parse --abbrev-ref HEAD
这两个命令之间的区别在于,如果没有当前分支,第一个命令将失败(并显示错误消息)。第二个打印 HEAD
对于这个案例。当HEAD
时发生这种情况是“分离的”,即存储库没有当前分支。
git branch | grep \* | cut ...
序列成功但打印 (HEAD
对于这个分离头案例,和 (HEAD
没有用。
关于javascript - 尝试在需要管道的子进程中运行 git 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54353597/