使用gulp-git时如何使用git-dir和工作树



我试图使用gulp-git启动一个git命令,但遇到了问题,因为我的git命令中需要包含额外的参数。即git-dir和工作树。git命令如下:

git --git-dir=../git_repos/dev --work-tree=../dev status

当我在gullfile.js所在的同一文件夹中从命令行运行时,它可以正常工作,但我无法找到包含额外参数的正确方法。

我的基本测试任务是这样的:

var gulp = require('gulp');
var git = require('gulp-git');    
gulp.task('gitDevStatus', function(){
git.status({ cwd: "--git-dir=../git_repos/dev --work-tree=../dev" }, function (err, stdout) {
if (err) throw err;
console.log(JSON.stringify(stdout));
console.log("DONE");
});
});

我遇到的问题是:

git.status({ cwd: "--git-dir=../git_repos/dev --work-tree=../dev" }, ...

如果我在没有任何参数的情况下运行它,我当然会失败,因为它找不到git文件:

git.status({ }, ... 
fatal: Not a git repository (or any of the parent directories): .git

如果我把额外的变量作为args,我会得到:

git.status({ args: "--git-dir=../git_repos/dev --work-tree=../dev" },
fatal: Not a git repository (or any of the parent directories): .git

这表明本例中的args不会更改已执行的git命令

最后,如果我将它们添加到cwd中:就像在我的完整任务示例中一样,我得到:

git.status({ cwd: "--git-dir=../git_repos/dev --work-tree=../dev" }, ...
Error: spawn ENOENT

我知道这个错误是因为它找不到文件或目录,但至少它不再抱怨没有.git

我尝试过的其他事情包括用嵌套引号包装目录定义:

git.status({ cwd: "--git-dir='../git_repos/dev' --work-tree='../dev'" }, ...

所有尝试都以相同的派生ENOENT错误结束。

有人能为我指出正确的方向吗?我应该如何处理gulp-git中这种更复杂的git命令?

经过一段时间的休息和对gulp-git文档的再次查看,我尝试使用exec函数,并获得了成功的结果:

git.exec({args : '--git-dir=../git_repos/dev --work-tree=../dev status'}, function (err, stdout) {
if (err) throw err;
console.log(stdout);
});

我不确定这是否是最佳实践,所以如果有人有更多的知识可以分享,我将不胜感激。

最新更新