在 Git 中编写一个预推送挂钩以 grep regex 的所有文件想要在找不到 regex 时拒绝推送

Writing a pre-push hook in Git to grep all files for regex want to reject push if regex not found

我有以下预推钩子。理想情况下,我希望它遍历所有被推送到我的存储库的文件,如果任何文件的内容与顶部定义的正则表达式不匹配,则拒绝推送。尝试遍历文件时出现以下错误:"undefined method `each' for "":String (NoMethodError)"。 '.each' 不起作用,因为 git 命令返回包含已更改文件的字符串。

#!/usr/bin/env ruby

regex = "\s*GO\s*$"

localRef, remoteRef = ARGV
#puts localRef
#puts remoteRef

input = $stdin.readlines[0]
localSha = input.split(" ")[1]
remoteSha = input.split(" ")[3]
#puts localSha 
#puts remoteSha

range = "#{remoteSha}..#{localSha}"

#folderPath = `git rev-parse --show-toplevel`
#puts folderPath 

`git diff --name-only --diff-filter=ACMR #{range}`.each do |file|
  #puts file
  content = File.read(file)
  unless content.match(regex)
    puts "#{file} must end with 'GO' keyword"
    exit 1
  end
end

exit 0 

有谁知道我如何循环返回的文件?

谢谢

只需要使用“.each_line”而不是“.each”。