在.git/hooks
中,我启用pre-commit
。我想将分阶段文件提取到另一个目录中。这是我的命令。
git diff --cached --name-only | grep -E ".*\.(kt|java)" | git --git-dir=.git --work-tree=staged-dir checkout-index -f -q --stdin
如您所见,我过滤了java和kotlin文件。但是上面的代码在pre-commit
中对我不起作用。但是如果我在终端执行上面的命令,则将提取的文件提取到staged-dir
目录。
当我删除checkout-index
时,会有一些输出。
git diff --cached --name-only | grep -E ".*\.(kt|java)"
项目/ A.kt
项目/ B.java
rootProject
|---.git
|---staged-dir
答案 0 :(得分:0)
使文件可执行并添加适当的shebang(即:!#/ bin / bash )
要启用钩子脚本,请将文件放在Git目录的hooks子目录中,该目录名称相应且可执行。
答案 1 :(得分:0)
如果~/.gitconfig
中设置了#!/bin/bash
echo 'OK' > "`git rev-parse --show-toplevel`"/pre-commit-hook-executed
,则会禁用每个存储库挂钩。尝试注释掉这个配置,并通过向它添加这些行来检查挂钩是否已执行:
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<User count="2">
<Username>Bob</Username>
<Password>test</Password>
</User>
必须在存储库的顶级目录中创建一个文件。如果它在提交后不存在(或者至少在提交消息编辑器打开时),则不执行钩子。
有关详细信息,请参阅https://git-scm.com/docs/git-config#git-config-corehooksPath