确定在最新Git提交的目录中是否更改了任何文件

时间:2017-07-12 20:40:52

标签: git githooks

我为post-commit写了一个git钩子。我想知道最新的提交是否更改了特定目录中的任何文件。如果有任何更改,我可以继续并调用一些昂贵的代码,否则我可以跳过它。

所以,far I'm getting the short hash like so

# get last commit hash prepended with @ (i.e. @8a323d0)
function parse_git_hash() {
  git rev-parse --short HEAD 2> /dev/null | sed "s/\(.*\)/@\1/"
}

现在,我需要确定指定目录是否有任何更改。但我不知道该怎么做。我查看并使用了git-loggit-show,但到目前为止没有成功。

所以,我需要做这样的事情。

if [directory-changed()] {
  echo "start expensive operation"
}

这实际上让我分道扬:实际上它抓住了最后一次提交而不是指定的提交。

git log  -U a79851b -1 my/directory/path

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用以下命令获取最新提交中添加,修改,删除和重命名的文件:

git diff --name-only --diff-filter=AMDR --cached @~..@

要获取影响特定目录的更改,请使用grep过滤输出。例如:

changes() {
  git diff --name-only --diff-filter=AMDR --cached @~..@
}

if changes | grep -q dirname {
  echo "start expensive operation"
}

答案 1 :(得分:0)

带参数的脚本的修改版本为:

#!/bin/bash

git diff --name-only --diff-filter=ADMR @~..@ | grep -q $1
retVal=$?

echo "git command retVal : ${retVal}"
if [ $retVal -eq 0 ]; then
  echo "folder/file : $1 changed"
else
  echo "no match found for the folder/file : $1"
  exit $retVal
fi