使用node.js判断是否在git目录中

10

我正在尝试确定我的节点进程是否在Git目录中运行。以下方法可用,但仍会在控制台输出致命错误。

function testForGit() {
    try {
        var test = execSync('git rev-parse --is-inside-work-tree', {encoding: 'utf8'});
    } catch (e) {
    }
    return !!test;
}

console.log(testForGit());

当我在 git 控制的目录下时,结果为 true。但是当我在不受 git 控制的目录下时,得到:

fatal: Not a git repository (or any of the parent directories): .git
false

我的问题:

是否有一种方法可以抑制记录错误?或者是否有更好的方法来确定我是否处于受 git 控制的目录下?

实质上,我正在尝试运行 Bash 等效命令

if git rev-parse --git-dir > /dev/null 2>&1; then
    ... do something
fi

为什么要踩?这是对一个合法问题的合法尝试... - KevBot
似乎查找隐藏的.git文件夹会更简单/更快... - dandavis
@dandavis,我考虑过这个问题,但是不确定递归运行父目录直到根目录会有什么后果。 - KevBot
2个回答

7
如果您正在使用docker并且不想在为应用程序构建镜像时安装git作为系统级依赖项,可能是因为我们想更快地构建镜像并尽可能保持镜像大小较小,则可以采取以下方式。
@janos提供的方法无法实现。 另一种方法是检查您的项目根路径中是否存在.git目录。但这取决于您的要求。对我来说,这已经足够了。
exports.isGitSync = function isGitSync (dir) {
  return fs.existsSync(path.join(dir, '.git'))
}

这应该是批准的答案,因为你实际上不需要 git。并且在启动节点进程时允许同步操作。此外,您可以检查配置文件并返回包含存储库远程源的内容。 - darklightcode

1
您可以尝试在execSync调用中重定向stdout,像这样:

var test = execSync('git rev-parse --is-inside-work-tree 2>/dev/null', {encoding: 'utf8'});

注意:即使您的用户在git存储库的子目录中,这也是正确的。 - Ahmad Awais

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接