我想我不明白gulp-git是如何工作的。我希望能够检查是否有未实现的更改,然后根据结果运行额外的代码,但是得到了一些奇怪的结果,请参见注释中的值:
let results = '';
git.status({ args: '--porcelain' }, (err, stdout) => {
results = stdout;
console.log(stdout.length); // 26
});
console.log(results.length); // 0如何从status调用中获取内容,返回只返回一个Stream就会出现。
编辑:
基于Marco的回答,我做了以下工作,但是,不要认为我对文档的理解是正确的:
async getStatus() {
const { stdout } = await git.status({ args: '--porcelain' });
console.log(stdout);
}
pull() {
process.chdir(`${this.localURL}/${this.code}`);
this.getStatus().then(data => {
console.log(data);
});上述产出:
Socket {
connecting: false,
_hadError: false,
_handle:
Pipe {
onread: [Function: onStreamRead],
reading: true,
[Symbol(owner)]: [Circular] },
_parent: null,
...
undefined
[21:49:26] git status --porcelain
A templates/dsdasdas.tpl编辑2
还不太明白
getStatus() {
util.promisify(git.status({ args: '--porcelain' }));
}
async pull() {
process.chdir(`${this.localURL}/${this.code}`);
let status = await this.getStatus().stdout.on('data', function (data) {
return data;
});
console.log(`status: ${status}`);发布于 2020-12-28 21:10:31
这行中的results仍然是指第一行console.log(results.length); // 0,它的length实际上等于0。正如您现在可以想象的那样,问题是作为第二个参数传递的函数是一个回调函数。
我看了git源代码,git.status使用了child_process.exec函数。奇怪的是
与exec(3) POSIX系统调用不同,child_process.exec()不替换现有进程,而是使用shell执行命令。
因此,您的git status命令实际上是在一个不同的shell中执行的,这就是为什么git.status函数在被调用后立即返回,但将您指定的回调函数传递给child_process.exec函数的原因。
如果你需要的话,你可以通知整个电话。
https://stackoverflow.com/questions/65483196
复制相似问题