使用 gulp-git 时如何使用 git-dir 和 work-tree

Using gulp-git how to use git-dir and work-tree when

我正在尝试使用 gulp-git 触发 git 命令,但我遇到了麻烦,因为我有额外的参数需要包含在我的 [=47] 中=] 命令。即 git-dir 和 work-tree。 git命令如下:

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

当我 运行 从与我的 gulpfile.js 相同的文件夹中的命令行运行它时,它工作正常,但我无法找出包含额外参数的正确方法。

我的基本测试 gulp 任务如下所示:

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

如果我将额外的变量作为参数,我得到:

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

这表明在这种情况下的参数没有改变执行的 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'" }, ...

所有尝试都以相同的 spawn 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);
});

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