Git 挂钩拒绝文件名超过指定限制的提交

Git hook to reject commits where filename is longer than specified limit

我想创建一个客户端预提交 git 挂钩,如果添加到提交的任何文件的文件名超过指定限制(比如 256 ).

这里是一个起点:

#!/bin/sh

# .git/hooks/pre-commit
# Checks that the file about to be committed
# doesn't have a name longer than 256 characters

if test $(git diff --cached --diff-filter=A --name-only | xargs -0 basename | tr -d '\n' | wc -c) -gt 256
then
  echo "The staged file name is longer than 256 characters"
  exit 1
fi

exit 0

这是命令的细分:

  • git diff --cached --diff-filter=A --name-only 获取暂存文件的路径
  • xargs -0 basename 对于每个路径,提取文件名
  • tr -d '\n' 删除换行符
  • wc -cReturns文件名的字符数

如果您只有一个暂存文件,则此示例有效。您必须通过 运行 对所有分阶段路径进行相同的循环检查来进一步开发它。