为什么 "git log" 的输出在终端和 execSync in 节点中不同.js



我有一个新创建的存储库。当我执行命令时:

git log --no-color --pretty=oneline

在终端,我得到:

d4288625b31ad486941d6f4848054dcd96487687 (HEAD -> master, origin/master, origin/HEAD) Initial commit

这是我们自然期望的。

如果我在node.js:中执行相同的命令

const {execSync} = require('child_process')
const cmd = `git log --no-color --pretty=oneline`
const commitlog = execSync(cmd, {encoding: 'utf8'})
console.log(commitlog)

我得到:

d4288625b31ad486941d6f4848054dcd96487687 Initial commit

作为输出。正如你所看到的,括号内的部分被切掉了。

我也在一个成熟的存储库中测试过这一点,但仍然会发生同样的情况,而且它与node.js.中的maxBuffer设置无关

来自man git log:

--no decorate,--decorate[=short|full|auto|no]
[…]如果指定了auto,那么如果输出对于终端,ref名称显示为short,否则为no显示ref名称。默认选项为short。

所以在您的情况下似乎以某种方式设置了--decorate=auto?添加--decorate=short以获得确定性输出。

最新更新