GIT:我如何以高效的方式观察本地变化?

时间:2014-07-09 14:18:14

标签: git gruntjs grunt-contrib-watch

简短说明

我希望以高效的方式检测本地git存储库中的本地更改。这意味着检测哪些文件是在本地修改的,还有未修改的文件。任何未经修改的更改/文件添加都必须被选中。

我的尝试

到目前为止我已经得到了什么(要点):https://gist.github.com/kevin-smets/02bda148a5330f350e6b

这是一个可以独立运行或作为git插件运行的脚本。它的作用基本上如下,每两秒启动一次git status --porcelain,解释这个以检查哪些文件被更改。但是,当它运行时,它会持续占用大约8%的CPU。我尝试了git --diff-files和各种其他命令,但都导致了高CPU使用率。 :(

为什么吗

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

一个想法

我的想法是,IntelliJ / WebStorm(我当前的IDE)如何监控GIT存储库?我试着进入社区版的源代码,但是,我无法想象那个:)。 WebStorm必须以某种方式执行此操作而不会对CPU造成负担,它似乎会在超过一秒或更短的时间内获取这些更改......即使它们是在IDE之外进行的。我想知道GIT中是否有一些事件系统,但我找不到这些内容。

感谢您阅读

任何帮助,总是受到高度赞赏!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我最终选择了Chokidar来监控我的源文件夹。它现在大约有2万个文件,只要我看文件夹本身并没有像** / * .scss那样的小球,它就像一个魅力。

我自己通过检查文件的extname并将其提供给正确的构建目标来对文件类型进行过滤。这样我就从过程中消除了git。当Chokidar通知你文件更改时,你仍然可以运行任何git命令,这样就可以消除丑陋的任意超时,并且你的CPU不会经常被征税。