我需要在子进程中运行git branch命令,但是我只想获取当前签出的分支。该命令在终端中起作用:
git branch | grep \* | cut -d ' ' -f2
我有很多文章试图做类似的事情,但是我对Unix命令的理解还不足以得到解决方案。
我已经尝试了很多其他方法:
spawn("git", ["branch | grep \* | cut -d ' ' -f2"], opts)
这就是我。从stderr获取:
git:'branch | grep * | cut -d''-f2'不是git命令。见'git --help'。
答案 0 :(得分:2)
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
,而(HEAD
没有用。