Git 未在预提交挂钩中使用暂存源
Git not using staged sources in pre-commit hook
在将更改推送到 git 之前,我在预提交挂钩中使用此脚本进行一些检查。
#!/bin/bash
mvn clean compile -DskipTests &> $TEMP/cc.txt &
A=$!
wait $A
A=$?
if test "$A" != "0"
then
cat $TEMP/cc.txt
exit 1
fi
mvn javadoc:javadoc -T 8 &> $TEMP/jd.txt &
B=$!
mvn pmd:cpd-check &> $TEMP/pmd.txt &
C=$!
mvn org.jacoco:jacoco-maven-plugin:prepare-agent test org.jacoco:jacoco-maven-plugin:report -T 8 &> $TEMP/jcc.txt &
D=$!
mvn checkstyle:checkstyle -Dcheckstyle.config.location=https://XXXX &> $TEMP/cs.txt &
E=$!
wait $B
B=$?
wait $C
C=$?
wait $D
D=$?
wait $E
E=$?
mvn sonar:sonar -Dsonar.host.url=https://sonarcubeXXXX &> $TEMP/cq.txt &
F=$!
wait $F
F=$?
echo "compile $A, javadoc $B, pmd $C, jacoco $D, checkstyle $E, sonar $F"
if test "$A$B$C$D$E$F" != "000000"
then
if test "$D" != "0"
then
cat $TEMP/jcc.txt
fi
if test "$F" != "0"
then
cat $TEMP/cq.txt
fi
exit 1
fi
exit 0
但是只要 pre-commit-hook 是 运行(5 分钟),我就无法工作和更改源文件。
我使用 Sourcetree 提交,sourcetree 区分暂存文件和未暂存文件。提交文件时,sourcetree 执行此命令:
git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\XXXX\AppData\Local\Temp\fbox5amv.k5f
问题:
如何只访问预期的代码库(当前推送的内容 + 我已经暂存并尝试提交的内容)而不访问未在 Sourcetree 中暂存的更改?
我以前使用过 subversion-commit-hooks,它们是服务器端的,它们只能提取预期的代码库。
有什么想法吗?
由于没有其他答案,因此在提交(提交)之前,如果没有未暂存的更改,可能无法访问暂存+提交+推送的更改。
因此我不得不将预提交挂钩更改为 post-commit
挂钩并将脚本更改为:
#!/bin/bash
rm -rf ../committed
mkdir ../committed
cp -rf * ../committed/
cd ../committed
git stash save -u
mvn clean compile -DskipTests &> $TEMP/cc.txt &
(...)
在将更改推送到 git 之前,我在预提交挂钩中使用此脚本进行一些检查。
#!/bin/bash
mvn clean compile -DskipTests &> $TEMP/cc.txt &
A=$!
wait $A
A=$?
if test "$A" != "0"
then
cat $TEMP/cc.txt
exit 1
fi
mvn javadoc:javadoc -T 8 &> $TEMP/jd.txt &
B=$!
mvn pmd:cpd-check &> $TEMP/pmd.txt &
C=$!
mvn org.jacoco:jacoco-maven-plugin:prepare-agent test org.jacoco:jacoco-maven-plugin:report -T 8 &> $TEMP/jcc.txt &
D=$!
mvn checkstyle:checkstyle -Dcheckstyle.config.location=https://XXXX &> $TEMP/cs.txt &
E=$!
wait $B
B=$?
wait $C
C=$?
wait $D
D=$?
wait $E
E=$?
mvn sonar:sonar -Dsonar.host.url=https://sonarcubeXXXX &> $TEMP/cq.txt &
F=$!
wait $F
F=$?
echo "compile $A, javadoc $B, pmd $C, jacoco $D, checkstyle $E, sonar $F"
if test "$A$B$C$D$E$F" != "000000"
then
if test "$D" != "0"
then
cat $TEMP/jcc.txt
fi
if test "$F" != "0"
then
cat $TEMP/cq.txt
fi
exit 1
fi
exit 0
但是只要 pre-commit-hook 是 运行(5 分钟),我就无法工作和更改源文件。
我使用 Sourcetree 提交,sourcetree 区分暂存文件和未暂存文件。提交文件时,sourcetree 执行此命令:
git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\XXXX\AppData\Local\Temp\fbox5amv.k5f
问题:
如何只访问预期的代码库(当前推送的内容 + 我已经暂存并尝试提交的内容)而不访问未在 Sourcetree 中暂存的更改?
我以前使用过 subversion-commit-hooks,它们是服务器端的,它们只能提取预期的代码库。
有什么想法吗?
由于没有其他答案,因此在提交(提交)之前,如果没有未暂存的更改,可能无法访问暂存+提交+推送的更改。
因此我不得不将预提交挂钩更改为 post-commit
挂钩并将脚本更改为:
#!/bin/bash
rm -rf ../committed
mkdir ../committed
cp -rf * ../committed/
cd ../committed
git stash save -u
mvn clean compile -DskipTests &> $TEMP/cc.txt &
(...)