bai*_*rog 4 windows git bash pre-commit-hook git-bash
我正在使用 Windows 版 Git(和 TortoiseGit)。
我的目标是防止提交修改/添加至少一个非 UTF-8 文件。
枚举修改/添加的文件:我找到了以下代码
{ git diff --name-only ; git diff --name-only --staged ; }
Run Code Online (Sandbox Code Playgroud)
这是最好的(正确且最简洁的)方法吗?
搜索非 UTF-8 文件:我找到了以下代码
{ git diff --name-only ; git diff --name-only --staged ; } | xargs -I {} bash -c "iconv -f utf-8 -t utf-16 {} &>/dev/null || echo {} - is non-UTF8!"
Run Code Online (Sandbox Code Playgroud)
如果我在存储库根文件夹中启动 Git Bash - 它会起作用(显示每个非 UTF-8 文件)。所以我将上面的代码重命名.git/hooks/pre-commit.sample
为并复制粘贴。.git/hooks/pre-commit
提交更改后,TortoiseGit 提交 gui 窗口中不会显示任何特殊内容。所以看起来预提交挂钩无法正常工作。
如果存在任何非 UTF-8 文件,则拒绝提交:显示所有非 UTP-8 文件后,应拒绝提交。但我不知道如何做到这一点(显示一些退出代码 - 但如何?)。
因此,我们将不胜感激任何帮助。
git diff --name-only --staged --diff-filter d | xargs -I {} bash -c
"iconv -f utf-8 -t utf-16 {} &>/dev/null || { echo {} - is non-UTF8!; exit 1; }"
Run Code Online (Sandbox Code Playgroud)
此代码迭代所有在提交中更改的文件(删除的文件除外 - 即添加、修改、复制和重命名),并检查是否存在任何非 UTF8 文件。列出所有找到的文件并中止提交。