Я нашел себя работающим с группой, которая имеет утомительный формат журнала изменений. Я решил, что хочу автоматизировать создание записи журнала изменений на основе данных сообщения о фиксации. Процесс заключается в том, что вы поставляете форматированное сообщение фиксации, затем меняете файл журнала изменений «на лету» и пытаетесь добавить его в текущую фиксацию.Git hook commit-msg git добавить файл
У меня совершить-сообщ крюк:
#!/bin/bash
GIT_BRANCH=`git branch`
# Only run this hook on the master branch
if [ "$GIT_BRANCH" = '* master' ]
then
# set some variables we'll need
SAMPLE_COMMIT_MESSAGE="minor: #ws-666 Brings the devil back to life"
COMMIT_MESSAGE_FILE=$1
FULL_COMMIT_MESSAGE=$(cat $COMMIT_MESSAGE_FILE)
CURRENT_DATE=$(date +"%Y-%m-%d")
# let's do some pattern matching on the commit to set more variables
[[ $FULL_COMMIT_MESSAGE =~ (ws-[0-9]+)[:space:]*(.*) ]]
JIRA_ISSUE=${BASH_REMATCH[1]^^}
COMMIT_MESSAGE=${BASH_REMATCH[2]}
[[ $FULL_COMMIT_MESSAGE =~ ^(M) ]]
if [ -n "${BASH_REMATCH[1]}" ]
then
CHANGE_IMPACT="_Major_"
fi
[[ $FULL_COMMIT_MESSAGE =~ ^(m) ]]
if [ -n "${BASH_REMATCH[1]}" ]
then
CHANGE_IMPACT="_minor_"
fi
[[ $FULL_COMMIT_MESSAGE =~ ^([pP]) ]]
if [ -n "${BASH_REMATCH[1]}" ]
then
CHANGE_IMPACT="_patch_"
fi
#echo Full Commit Message "$FULL_COMMIT_MESSAGE"
#echo Jira issue $JIRA_ISSUE
#echo Change Type $CHANGE_IMPACT
#echo Commit Message "$COMMIT_MESSAGE"
if [ -z $JIRA_ISSUE ]
then
echo "You failed to specify a jira issue, your commit must look like:"
echo "$SAMPLE_COMMIT_MESSAGE"
exit 1
fi
if [ -z $CHANGE_IMPACT ]
then
echo "You failed to specify a change impact, your commit must look like:"
echo "$SAMPLE_COMMIT_MESSAGE"
exit 1
fi
if [ -z $COMMIT_MESSAGE ]
then
echo "You failed to specify an actual commit message, your commit must look like:"
echo "$SAMPLE_COMMIT_MESSAGE"
exit 1
fi
sed -i -e ":a;N;s/\(# Change log.*\)\n/\1\n\n\* next ($CURRENT_DATE)\n $JIRA_ISSUE\n \* $CHANGE_IMPACT: $COMMIT_MESSAGE/" change-log.md
`git add change-log.md`
echo Running $BASH_SOURCE
set | egrep GIT
echo PWD is $PWD
fi
# For testing, always exit
echo "Exiting, no commit made"
exit 1
Я тогда выполните следующую команду:
git checkout -- ../change-log.md ; git commit ../fake -m"Major #ws-123 WeeeeeeEE" ; git status
В состоянии мерзавца я вижу:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ../change-log.md
Является ли это невозможно, чтобы git добавил файл на этом этапе процесса фиксации? Другие мысли о том, как лучше всего это сделать? Я думаю, что могу проверить, существует ли конкретная запись журнала изменений, если нет, добавить ее, а затем выйти, попросив добавить этот файл.
-j
Посмотрите здесь пример кода, который вы можете использовать.http: //stackoverflow.com/questions/35400416/what-are-some-more-forceful-ways-than-a-gitignore-to-keep- force-files-out-of/35400472 # 35400472 – CodeWizard
Не могли бы вы рассказать о соответствующей части? Вышеупомянутый крючок делает все, кроме, казалось бы, строки 'git add change-log.md', которая, похоже, не влияет. – Joel
Почему у вас есть внутри кавычек? 'git добавить change-log.md' попробовать его без него. вам нужно использовать их, если вы решите вернуть значение. – CodeWizard