检查块二进制文件git钩子

检查块二进制文件git钩子,git,perl,hook,Git,Perl,Hook,这是一个预接收git钩子,如果文件是二进制的,它应该阻止文件 #!/usr/bin/perl ########################################### use strict; use warnings; our $host = `uname -n`;chomp $host; our $repo = `pwd`;chomp; if ( $repo =~ /^(.+)\.git/ ){ $repo = $1; } $repo =~ /([^\/]+)$/;

这是一个预接收git钩子,如果文件是二进制的,它应该阻止文件

#!/usr/bin/perl
###########################################
use strict; 
use warnings;

our $host = `uname -n`;chomp $host;
our $repo = `pwd`;chomp;

if (  $repo =~ /^(.+)\.git/ ){
   $repo = $1;
}
$repo =~ /([^\/]+)$/;
$repo = $1;
chomp $repo;


print "========================================================\n";
print "GIT hook.....: pre-commit\n";
print "GIT server...: $host \n";
print "GIT Repo.....: $repo \n";
print "========================================================\n";

my @new_file_list =  `git diff --cached --name-only --diff-filter=A`;
foreach $file (@new_file_list)
{
  chomp($file);

  # Check if file is binary
  if (-B $file)
  {
    print STDERR "WARNING: $file is binary.\n";
    print STDERR "Please check with repo owner before committing binary files.\n";
    print STDERR "To bypass this warning re-run your commit with the '--no-verify' option\n";
    exit 1;
  }
}
你能告诉我,如果工作正常,我怎么检查

我试图创建一个这样的二进制文件

echo -n -e \\x48\\x00\\x49\\x00 > myfile
还是这个

echo "0000 4865 6c6c 6f20 776f 726c 6421 0000" > text_dump
xxd -r -p text_dump > binary_dump

但是当我按下它们时,这个钩子不会阻止这些文件。

您用字符串填充了您的文件,Hello world!根据perldoc-f-B,它不符合二进制

检查文件的第一块左右的奇数字符,如 作为高位设置的奇怪控制代码或字符。如果太 发现许多大于30%的奇怪字符,这是a-B文件


您可以尝试生成满足此条件的字节序列,或者将头为-c的二进制文件的一部分复制到文件中。

不太可能。如何创建一个二进制文件来触发这个钩子?您可以生成一个满足条件的文件:检查文件的第一个块左右是否有奇怪的字符,例如奇怪的控制代码或具有高位集的字符。如果发现太多大于30%的奇怪字符,则为a-B文件;我试图放置大的.exe文件并推送它们,但是钩子没有抛出错误。为什么会这样?这是否意味着钩子不能用perl-e print-B'yourbinary'测试二进制文件?'binary':'text';它可能包含错误,我现在没有访问perl的权限。您看到标题行了吗?GIT钩子等。可能钩子没有启动。不,钩子在我使用perl-e print-B'mybinaryfile'?'binary':'text';,时不知何故启动;,它什么也不印。