检查块二进制文件git钩子
这是一个预接收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 =~ /([^\/]+)$/;
#!/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';,时不知何故启动;,它什么也不印。