检查块二进制文件git hook

时间:2017-06-18 08:54:30

标签: git perl hook

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

#!/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

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

1 个答案:

答案 0 :(得分:1)

你用字符串填充文件," Hello world!"根据{{​​1}}

不符合二进制的条件
  

检查文件的第一个块左右是否为奇数字符   作为奇怪的控制代码或高位设置的字符。如果是的话   找到许多奇怪的字符(> 30%),它是一个-B文件;

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