问题
I'm writing a post-commit
hook for git
. I would like to know if the latest commit changed any of the files in a particular directory. If there were any changes I can then proceed and call some expensive code, otherwise I can just skip it.
So, 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/"
}
Now, I need to determine if there were any changes to the specified directory. But I'm not sure how to go about that. I've looked at and played with git-log
and git-show
but without success so far.
So, I need to do something like this.
if [directory-changed()] {
echo "start expensive operation"
}
This actually gets me part way there: Actually it grabs the last commit not the one specified.
git log -U a79851b -1 my/directory/path
Thanks in advance.
回答1:
You can get the added, modified, deleted and renamed files in the latest commit with:
git diff --name-only --diff-filter=AMDR --cached @~..@
To get the changes affecting a specific directory, filter the output using grep
. For example:
changes() {
git diff --name-only --diff-filter=AMDR --cached @~..@
}
if changes | grep -q dirname {
echo "start expensive operation"
}
来源:https://stackoverflow.com/questions/45067130/determine-if-any-file-changed-in-directory-for-latest-git-commit