我正在尝试根据以下条件编辑该范围内的所有提交消息:
换句话说,我希望所有提交都具有这样的后缀:
Jobs:
<author_job>
我想到了这样的事情:
#!/bin/bash
if [ "$#" -lt "2" ]; then
echo Syntax: $0 \<initial commit\> \<final commit\>
exit
fi
INITIAL_COMMIT=$1
FINAL_COMMIT=$2
FILTER="
ORIGINAL_COMMIT=\`cat\` &&
echo \${ORIGINAL_COMMIT} &&
if [ \"\${ORIGINAL_COMMIT/\"Jobs:\"}\" == \"\${ORIGINAL_COMMIT}\" ]; then
echo
echo Jobs:
case "\${GIT_AUTHOR_EMAIL}" in
\"[email protected]\") echo \"JOB_ID_USER_1\" ;;
\"[email protected]\") echo \"JOB_ID_USER_2\" ;;
\"[email protected]\") echo \"JOB_ID_USER_3\" ;;
*) echo UNKNOWN ;;
esac
fi
"
echo Running git filter branch
git filter-branch --msg-filter "${FILTER}" ${INITIAL_COMMIT}..${FINAL_COMMIT}
但是我在检测提交消息是否已经具有后缀时遇到了麻烦。没有if条件,它确实可以很好地工作,但是它将后缀添加到已经具有该条件的消息中。
在这种情况下,这是过滤器:
FILTER="
cat &&
echo &&
echo Jobs: &&
case "\${GIT_AUTHOR_EMAIL}" in
\"[email protected]\") echo \"JOB_ID_USER_1\" ;;
\"[email protected]\") echo \"JOB_ID_USER_2\" ;;
\"[email protected]\") echo \"JOB_ID_USER_3\" ;;
*) echo UNKNOWN ;;
esac
"
有谁知道如何解决这个问题?
我见过有人在做python脚本来解决类似的问题。这是个好主意吗?
谢谢。
正如@Kristján所建议的那样,可以使用case来搜索子字符串。
FILTER="
ORIGINAL_COMMIT=\`cat\` &&
case "\${GIT_AUTHOR_EMAIL}" in
\"[email protected]\") JOB_ID=\"JOB_ID_USER_1\" ;;
\"[email protected]\") JOB_ID=\"JOB_ID_USER_2\" ;;
\"[email protected]\") JOB_ID=\"JOB_ID_USER_3\" ;;
*) JOB_ID=\"UNKNOWN\" ;;
esac &&
case \"\${ORIGINAL_COMMIT}\" in
*Jobs:*) ;;
*)
echo
echo Jobs:
echo \"\t\${JOB_ID}\"
esac
"
也可以使用python解决此问题。比上面的解决方案麻烦一些,但由于使用的是python,它还为您提供了更多功能。
PWD=`pwd`
FILTER="
ORIGINAL_COMMIT=\`cat\` &&
case "\${GIT_AUTHOR_EMAIL}" in
\"[email protected]\") JOB_ID=\"JOB_ID_USER_1\" ;;
\"[email protected]\") JOB_ID=\"JOB_ID_USER_2\" ;;
\"[email protected]\") JOB_ID=\"JOB_ID_USER_3\" ;;
*) JOB_ID=\"UNKNOWN\" ;;
esac
echo \"\${ORIGINAL_COMMIT}\" | ${PWD}/Process_Commit.py \${JOB_ID}
"
python脚本(Process_Commit.py):
#!/usr/bin/python
import sys
job_id = sys.argv[1]
adjust = True
for line in sys.stdin:
sys.stdout.write(line)
if line.find("Jobs:") != -1:
adjust = False
if adjust == True:
print
print "Jobs:"
print "\t",job_id
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句