У нас тоже есть такое же соглашение, но мы используем git: в основной ветке наша версия maven всегда 0.0.1-SNAPSHOT, а для каждой ветви maven ветка BRANCH_NAME-SNAPSHOT.
Мы взялись за решението же самое слияние ветки с мастером, и, кроме того, разработчики забыли запустить versions:set
и зафиксировать неверную версию в мастере.
Мы создали ловушку git, которая предотвращает такие неправильные фиксации:
#!/bin/bash
# To enable this hook:
# ln -s ~/src/common-arsbigdata/common-fw/src/main/resources/bin/pre-commit ~/src/common-arsbigdata/.git/hooks/pre-commit
BRANCH_NAME=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
echo "current branch: $BRANCH_NAME"
for file in $(find . -name 'pom.xml' -not -path "*/target/*" -not -path "*/bin/*"); do
VERSION=`head $file | grep "<version>" | sed -e 's,.*<version>\([^<]*\)-SNAPSHOT</version>.*,\1,g'`;
if [[ $BRANCH_NAME == "master" ]]; then
if [[ $VERSION != "0.0.1" ]]; then
echo $file
echo "expected version 0.0.1, actual version is $VERSION"
exit 1
fi
elif [[ $VERSION != $BRANCH_NAME ]]; then
echo $file
echo "expected version $BRANCH_NAME, actual version is $VERSION"
exit 1
fi
done
Мы управляем хуком внутри git-репо и создаем мягкую ссылку в .git/hooks
для него на каждой машине разработчика