inotify:监视除.gitignore中的文件以外的文件更改?
我正在尝试侦听除.gitignore之外的文件夹中的文件更改以触发重建inotify:监视除.gitignore中的文件以外的文件更改?,git,gitignore,inotify,inotifywait,Git,Gitignore,Inotify,Inotifywait,我正在尝试侦听除.gitignore之外的文件夹中的文件更改以触发重建 使用inotifywait和--exclude选项似乎是正确的方法。是否有人知道一种将.gitignore转换为regex的好方法,以便inotifywait--exclude可以正确接受?不要试图提前告诉inotifywait,最好通过git check ignore-nv--stdin运行修改后的路径。花更多的时间在gitignore文档上,你就会明白为什么,这些模式来自多个来源,并且它们是上下文敏感的,它们只是停止自动
使用inotifywait和--exclude选项似乎是正确的方法。是否有人知道一种将.gitignore转换为regex的好方法,以便inotifywait--exclude可以正确接受?不要试图提前告诉inotifywait,最好通过
git check ignore-nv--stdin运行修改后的路径。花更多的时间在gitignore文档上,你就会明白为什么,这些模式来自多个来源,并且它们是上下文敏感的,它们只是停止自动跟踪,它们不会阻止你专门跟踪某个文件。下面是一个完整的示例,它监视当前目录中未被gitignore文件的更改,如果任何文件发生更改,则运行/build
重要的一点是,.git/
不是.gitignored
,因此我们也会检查并忽略它
inotifywait --event close_write --monitor --recursive . |
while read -r directory events filename; do
echo "directory events filename: \"${directory}\" \"${events}\" \"${filename}\""
if ! echo "$directory" | grep -Eq '^\.\/\.git' &&
! git check-ignore --non-matching --verbose "${directory}/${filename}" >/dev/null 2>&1
then
echo 'will build'
./build
fi
done
如果您是Vim用户,您还需要配置:
set backupcopy=no
set noswapfile
set nowritebackup
在Vim 8.1中,set backupcopy=no
防止以下类型的事件:
directory events filename: "./" "CLOSE_WRITE,CLOSE" "4913"
令人讨厌的4913
如下所述:
(TODO使用vim-u NONE
最小化)防止创建.swp
文件:
理想情况下,我们也会将--事件移动到,创建,但在这种情况下,Vim会为每个:w
生成3个事件,即使我试图关闭所有临时文件(要最小化带有Vim的示例配置-u NONE
):
你也可以考虑检查文件是否被Git跟踪以自动包含<代码> .git < /C> >:但是这种方法更好,因为它甚至在它们被跟踪之前就使用了你正在测试的新文件。< / P >你听说过像詹金斯这样的连续集成工具吗?这使我省去了大量的写作,很可能是出了故障,代码。
directory events filename: "./" "MOVED_TO" "README.adoc~"
directory events filename: "./" "CREATE" "README.adoc"
directory events filename: "./" "CLOSE_WRITE,CLOSE" "README.adoc"