获取跟踪文件的 git 存储库路径的最有效方法

Most efficient way to get the path of a git repo which tracks a file

我正在使用 inotifywait 监视任意文件夹。当文件更改时,我想确定哪个 git 存储库(如果有)与该文件相关。

我看到这个答案: How to tell if a file is git tracked (by shell exit code)?

这里的区别是 - 我真的不在乎 git 是否在跟踪文件,我只是想知道 - 如果 git 来跟踪那个文件,git 现有的 git 回购。这是我的问题。

是最好的简单方法:

#!/usr/bin/env bash

cd "$(dirname "$changed_file")" && git rev-parse --show-toplevel 

?是这样吗? git rev-parse --show-toplevel 命令总是会给出该文件的相关 repo 吗?

if git were to track that file, which git existing git repo would it be for.

git rev-parse --show-toplevel 将向您显示存储库的工作树顶部,该存储库会从那里跟踪您 git add 的文件,是的,但是 Git 不强加任何要求关于存储库的各个部分的保存位置。对于您没有明确指出的那些,有一个搜索路径,并且 git rev-parse --show-toplevel 正在向您显示它找到的工作树,如果您没有告诉它,或者您告诉它使用的那个。说 git help 以查看显式使用它的主要选项,以及指向更多文档的指针(如果需要)。