是否仅在本地存储库上应用预提交?

时间:2019-05-09 05:36:57

标签: git

使用Git,我有一个预先提交的钩子,上面装有mvn clean install

我旨在测试在推送到远程仓库之前该命令是否正确执行。

问题在于此命令适用于我的当前目录,而不适用于本地git存储库(仅由添加的文件组成)。因此,有时会出现错误,因为在某些我没有添加的文件上,而没有这些文件就没有错误。

所以我的问题是我如何才能应用mvn clean install的预提交,该预提交仅适用于本地回购中添加的文件?

1 个答案:

答案 0 :(得分:0)

预提交的钩子外壳脚本示例:https://gist.github.com/dahjelle/8ddedf0aebd488208a9a7c829f19b9e8

注意第3行:

$(git diff --cached --name-only | grep -E '\.(js|jsx)$')

这将抓取git commit ...的文件,这些文件通过管道传递以仅过滤.js或.jsx文件。您可以修改此脚本并删除管道。

第5行:用您的node_modules/...修改mvn clean install行。

根据需要修改脚本。

编辑:

下面的示例可能更符合您的用例:https://eing.github.io/technology/2016/01/28/Git-Pre-Commit-Hooks-Part1/

{ echo "
git stash -q --keep-index
# Using "mvn test" to run all unit tests and run plugins to assert
#   * code coverage threshold >= 85% (using surefire, enforcer plugins)
#   * FindBugs at low threshold errors (using findbugs-maven-plugin)
#   * Checkstyle has 0 errors (using maven-checkstyle-plugin)
mvn clean install test
RESULTS=\$?
# Perform checks
git stash pop -q
if [ \$RESULTS -ne 0 ]; then
  echo Error: Commit criteria not met with one or more of the following issues,
  echo 1. Failure\(s\) in unit tests
  echo 2. Failure to meet 85% code coverage
  echo 3. Failure to meet low FindBugs threshold
  echo 4. Failure to meet 0 Checkstyle errors
  exit 1
fi
# You shall commit
exit 0"
} > pre-commit.sh
pushd .git/hooks
ln -s ../../pre-commit.sh pre-commit
chmod u+x pre-commit
popd