GIT:如何高效地监视本地更改?

5

简介

我想以高效的方式检测我本地git仓库中的本地更改。这意味着检测哪些文件在本地被修改,以及未进行版本控制的文件。任何未提交的更改/文件添加都必须被捕捉到。

我的尝试

目前我所得到的(代码片段): https://gist.github.com/kevin-smets/02bda148a5330f350e6b

这是一个可以独立运行或作为git插件运行的脚本。它基本上做的就是每两秒钟运行一次git status --porcelain命令,解释结果以检查哪些文件发生了更改。然而,在运行时,它会不断占用大约8%的CPU。我尝试了git --diff-files和各种其他命令,但都导致高CPU使用率 :(

为什么?

我想将这个文件列表提供给grunt watch进程。目前我的代码库有大约15k个文件并且还在增长。监视所有这些文件将变得简直不可能。我已经应用了静态过滤器来限制被监视的文件数量,但每次想要在定义的过滤器之外编辑一个文件时,手动更改它变得很麻烦。

一个想法

我想到的一个想法是,IntelliJ / WebStorm(我的当前IDE)如何监视GIT仓库?我尝试进入社区版的源代码,但是,我无法理解其中的内容:)。WebStorm肯定有一种不会占用CPU的方式来捕捉这些变化,即使它们是在IDE之外进行的。我想知道GIT是否有某种事件系统,但我找不到任何相关的信息。

感谢您的阅读

如有任何帮助,将非常感激!


2
搜索有关文件系统钩子的信息。这允许您设置操作(在此情况下为git命令),以便在文件系统发生更改时执行。 - Manu343726
你有没有考虑使用像 https://github.com/rvoicilas/inotify-tools/wiki 这样的工具来监控文件变化,然后每次检测到变化时,只需通过 git 检查文件是否被跟踪即可? - Attila O.
2个回答

1

我正在使用:

git status -s --porcelain

基准测试
time git status -s --porcelain
#...
real    0m0.078s
user    0m0.032s
sys 0m0.011s

简单:
time git status

#...
real    0m0.182s
user    0m0.075s
sys 0m0.089s

嗯,这确实有所改善。从8%降至5.4%。我想我需要研究一下文件系统钩子。我想要制作一个通用的解决方案(非特定于操作系统),因此只依赖GIT。然而,这似乎不可能。无论如何,感谢您的建议! - smets.kevin

0

最终我选择了Chokidar来监控我的源文件夹。现在它已经有大约20k个文件,只要我观察文件夹本身而不是像**/*.scss这样的glob,它就能完美地工作。

我通过检查文件的扩展名并将其提供给正确的构建目标来自己过滤文件类型。这样我就将git从流程中排除了。当Chokidar通知您文件更改时,您仍然可以运行任何git命令,这样就消除了丑陋的任意超时,并且您的CPU不会被持续占用。


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