有没有一种方法可以通过运行一些git命令并检查其退出码来判断一个文件是否正在被跟踪?

换句话说:git在跟踪文件吗?


当前回答

尝试在文件上运行git status。如果git没有跟踪它,它将打印一个错误

PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.

其他回答

如果您不想让错误消息弄乱控制台,也可以运行

git ls-files file_name

然后检查结果。如果git没有返回任何内容,则不会跟踪该文件。如果它被跟踪,git将返回文件路径。

如果你想把它合并到一个脚本中,比如PowerShell,这就很方便了:

$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
    ## do stuff with the tracked file
}

我的观点是:

Git ls-files | grep -x相对/路径

在自动补全shell中,可以通过按TAB键轻松确定相对/路径。添加额外的| wc -l以获得1或0输出。

我不知道有哪个git命令给出了一个“糟糕的”退出码,但似乎有一种简单的方法可以做到这一点,那就是使用一个git命令,它不会为没有跟踪的文件提供输出,比如git-log或git-ls-files。这样就不需要进行任何解析,可以通过另一个简单的实用程序(如grep)来运行它,以查看是否有任何输出。

例如,

Git-ls-files test_file.c | grep。

如果文件被跟踪,将以0代码退出,但如果文件未被跟踪,则退出代码为1。

try:

git ls-files --error-unmatch <file name>

如果不跟踪文件,将退出1

尝试在文件上运行git status。如果git没有跟踪它,它将打印一个错误

PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.