Git checkout-index在git hooks中不起作用

时间:2018-06-08 10:24:24

标签: git githooks pre-commit-hook

.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

2 个答案:

答案 0 :(得分:0)

使文件可执行并添加适当的shebang(即:!#/ bin / bash

来自git documentation

  

要启用钩子脚本,请将文件放在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

相关问题