Long Git 命令导致错误作为 npm 脚本
Long Git command causes error as npm script
我将此 npm 脚本添加到我的 package.json
文件中:
"gitlog" : "git log --graph --decorate -30 --all --date-order --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(cyan)%h%Creset %C(black bold)%ad%Creset%C(auto)%d %s'"
但是当我键入 npm run gitlog
时,我收到错误消息:fatal: Invalid object name '%H'.
我尝试将命令放在反引号中,但出现了另一个错误。我必须对这个命令做一些转义或者我怎样才能让它工作?
我不确定 NPM 如何转义字符串并在命令 line/terminal 上传递它,但您可能可以通过一些关于双重打包字符串的标准技巧来解决这个问题。
这里发生了两次字符串解析 - 首先将 package.json
文件中的 JSON 发送到 NPM,然后 NPM 将字符串发送到 terminal/command 行。因此,您需要弄清楚如何以一种方式嵌入内部引号,以便它们进入命令行(以一种与 git 一致的方式)。
尝试以下操作:
反转单双引号(单引号外)
在内引号前加反斜杠
- 反斜杠通常是特殊字符的转义字符
- 解析字符串时,引号是特殊字符
将内引号从单引号改为双引号后,在内引号前添加反斜杠
尝试复制所有内部引号(即代替 '%C(cyan)...'
尝试 ''%C(cyan)...''
或 ""%C(cyan)...""
)。有时解析器会将重复的引号视为转义字符,并在传递的最终输出中只放置一个单引号。
我怎么知道这是根本原因?
这里的线索是错误输出。如果您在字符串中找到第一个“%H”,您会看到它前面有一个 space。如果单引号被去掉,那么 git 将看到 space,并将其后的文本视为新参数的开始。
Git 无法将“%H”识别为有效的参数,因此它打印的错误消息就是结果。
将所有单引号 ('
) 替换为 JSON 转义双引号 (\"
),例如
"gitlog": "git log --graph --decorate -30 --all --date-order --date=format:\"%Y-%m-%d %H:%M:%S\" --pretty=format:\"%C(cyan)%h%Creset %C(black bold)%ad%Creset%C(auto)%d %s\""
^^ ^^ ^^ ^^
我将此 npm 脚本添加到我的 package.json
文件中:
"gitlog" : "git log --graph --decorate -30 --all --date-order --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:'%C(cyan)%h%Creset %C(black bold)%ad%Creset%C(auto)%d %s'"
但是当我键入 npm run gitlog
时,我收到错误消息:fatal: Invalid object name '%H'.
我尝试将命令放在反引号中,但出现了另一个错误。我必须对这个命令做一些转义或者我怎样才能让它工作?
我不确定 NPM 如何转义字符串并在命令 line/terminal 上传递它,但您可能可以通过一些关于双重打包字符串的标准技巧来解决这个问题。
这里发生了两次字符串解析 - 首先将 package.json
文件中的 JSON 发送到 NPM,然后 NPM 将字符串发送到 terminal/command 行。因此,您需要弄清楚如何以一种方式嵌入内部引号,以便它们进入命令行(以一种与 git 一致的方式)。
尝试以下操作:
反转单双引号(单引号外)
在内引号前加反斜杠
- 反斜杠通常是特殊字符的转义字符
- 解析字符串时,引号是特殊字符
将内引号从单引号改为双引号后,在内引号前添加反斜杠
尝试复制所有内部引号(即代替
'%C(cyan)...'
尝试''%C(cyan)...''
或""%C(cyan)...""
)。有时解析器会将重复的引号视为转义字符,并在传递的最终输出中只放置一个单引号。
我怎么知道这是根本原因?
这里的线索是错误输出。如果您在字符串中找到第一个“%H”,您会看到它前面有一个 space。如果单引号被去掉,那么 git 将看到 space,并将其后的文本视为新参数的开始。
Git 无法将“%H”识别为有效的参数,因此它打印的错误消息就是结果。
将所有单引号 ('
) 替换为 JSON 转义双引号 (\"
),例如
"gitlog": "git log --graph --decorate -30 --all --date-order --date=format:\"%Y-%m-%d %H:%M:%S\" --pretty=format:\"%C(cyan)%h%Creset %C(black bold)%ad%Creset%C(auto)%d %s\""
^^ ^^ ^^ ^^