改变了多少文件?

How many files have changed?

我想知道我在存储库中更改了多少文件。

目前我用的是这个命令,但是太慢了:

n = `git diff --name-only HEAD | wc -l | tr -d '[[:space:]]'`

我写了一个脚本,为每个子目录执行这个命令。每个子目录都是一个 git-repo。有了这个,我可以很容易地看到哪些回购有我需要提交的更改。

如何获得相同的信息,但速度更快?上面的命令需要很长时间才能执行,对于许多回购来说这是一个问题。

git status 似乎更快 (YMMV):

git status --porcelain | grep -cv '^??'

如果您只对查找存储库是否有更改(而不是确切计数)感兴趣,这可能是我所知道的最快的:

git diff --quiet --exit-code

如果有变化return1,否则0

我知道你原来的问题提到了提交的数量,但如果你只想看到变化,这可能就足够了。

要计算已修改文件的数量,我会使用 git ls-files:

git ls-files -m -z | awk -v RS='[=10=]' 'END { print NR }'

-m 显示修改后的文件,-z 以空字符 [=15=] 终止每个文件名。然后使用 awk 来计算记录数。这是最安全的选项,因为它可以正确处理包含换行符等奇怪字符的文件名。

如果您不担心这一点,您可以采用这种稍微简单一些的方法:

git ls-files -m | wc -l