git: 원본 코드 의 버 전 번 호 를 자동 으로 업그레이드 하고, tag, push 스 크 립 트 를 제출 합 니 다.
22257 단어 script
그래서 스스로 스 크 립 트 를 써 서 프로젝트 버 전 번호 에 대한 자동 업 그 레이 드 를 완성 하고 제출 합 니 다.실현 원리 도 복잡 하지 않다. 주로 정규 표현 식 을 이용 하여 원본 코드 에서 고정 형식
MAJOR.MINOR.PATCH[.DESC][-SNAPSHOT]
의 버 전 정 보 를 읽 은 다음 에 자동 으로 버 전 번 호 를 1 로 추가 하고 sed
으로 원본 코드 를 쓰 고 git 창 고 를 제출 하 며 버 전 태그 (tag) 를 붙인다. 이 스 크 립 트 가 있 으 면 한 번 만 실행 하면 버 전 번 호 는 자동 으로 1 (버 전 번 호 를 수 동 으로 입력 할 수 있다).다음은 버 전 정 보 를 포함 하 는 소스 코드
version.h
입 니 다. //!
시 작 된 줄 은 일부 매개 변 수 를 정의 합 니 다. 이 매개 변 수 는 스 크 립 트 가 소스 코드 에서 버 전 정 보 를 어떻게 얻 는 지 알려 주 는 정규 표현 식 입 니 다.#ifndef FLCONFIG_VERSION_H_
#define FLCONFIG_VERSION_H_
// verrel.sh //!
//! @TAG_PREFIX@
//! @VERSION_REG@ (FL_VERSION\s+)(\S*)(.*)
//! @VERSION_MAJOR_REG@ (FL_VERSION_MAJOR\s+)(\S*)?(.*)?
//! @VERSION_MINOR_REG@ (FL_VERSION_MINOR\s+)(\S*)?(.*)?
//! @VERSION_PATCH_REG@ (FL_VERSION_PATCH\s+)(\S*)?(.*)?
//! @VERSION_DESC_REG@ (FL_VERSION_DESC\s+)(\S*)?(\s*,.*)
//! @BEANCH_REG@ (FL_SCM_BRANCH\s+)(\S*)?(\s*,.*)
//! @COMMIT_REG@ (FL_SCM_COMMIT\s+)(\S*)?(\s*,.*)
//
#define FL_VERSION 0.0.2-SNAPSHOT
#define FL_VERSION_MAJOR 0
#define FL_VERSION_MINOR 0
#define FL_VERSION_PATCH 2
#define FL_VERSION_DESC ,
//
#define FL_SCM_BRANCH master,
// commit_id
#define FL_SCM_COMMIT 37ca318,
#endif /* FLCONFIG_VERSION_H_ */
스 크 립 트 구현
verrel.sh
#! /bin/bash
## , git , ,
## maven , -SNAPSHOT
## MAJOR.MINOR.PATCH[.DESC][-SNAPSHOT], RLV_FMT_REG
##
#
function get_var(){
echo $(sed -nr "s/^\s*\/\/!\s*$1\s*(\S*).*$/\1/p" $2)
}
#
function get_value_by_reg(){
echo $(sed -nr "s/^.*$1.*/\2/p" $2)
}
#
function check_version_format(){
if [[ -n "$1" && -z $(echo $1 | grep -E "$RLV_FMT_REG") ]] ;
then
echo "ERROR:invalid version string format( ),example: 1.0.0 OR 1.0.0.beta"
exit -1
fi
}
sh_folder=$(dirname $(readlink -f $0))
# ,
version_src=$sh_folder/src/flconfig/version.h
# git
branch=`git branch | grep "*"`
branch=${branch/* /}
# id
commit_id=`git rev-parse --short HEAD`
echo branch=$branch
echo commit_id=$commit_id
#
# release
RLV_FMT_REG="([0-9]+)\.([0-9]+)\.([0-9]+)(\.([[:alnum:]]+))?"
# ( -SNAPSHOT )
SS_VFMT_REG=$RLV_FMT_REG"(-(SNAPSHOT))?"
TAG_PREFIX=$(get_var @TAG_PREFIX@ $version_src)
echo TAG_PREFIX=$TAG_PREFIX
VERSION_REG=$(get_var @VERSION_REG@ $version_src)
echo VERSION_REG=$VERSION_REG
VERSION_MAJOR_REG=$(get_var @VERSION_MAJOR_REG@ $version_src)
echo VERSION_MAJOR_REG=$VERSION_MAJOR_REG
VERSION_MINOR_REG=$(get_var @VERSION_MINOR_REG@ $version_src)
echo VERSION_MINOR_REG=$VERSION_MINOR_REG
VERSION_PATCH_REG=$(get_var @VERSION_PATCH_REG@ $version_src)
echo VERSION_PATCH_REG=$VERSION_PATCH_REG
VERSION_DESC_REG=$(get_var @VERSION_DESC_REG@ $version_src)
echo VERSION_DESC_REG=$VERSION_DESC_REG
BEANCH_REG=$(get_var @BEANCH_REG@ $version_src)
echo BEANCH_REG=$BEANCH_REG
COMMIT_REG=$(get_var @COMMIT_REG@ $version_src)
echo COMMIT_REG=$COMMIT_REG
#
VERSION=$(get_value_by_reg $VERSION_REG $version_src)
echo VERSION=$VERSION
if [ -z "$VERSION" ] ;
then
echo "ERROR:failt to read version format from $version_src( )"
exit -1
fi
#
#
MAJOR_VERSION=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\1/p")
#
MINOR_VERSION=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\2/p")
#
PATCH_VERSION=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\3/p")
#
DESC=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\5/p")
#
SNAPSHOT=$(echo $VERSION | sed -nr "s/$SS_VFMT_REG/\7/p")
echo MAJOR_VERSION=$MAJOR_VERSION
echo MINOR_VERSION=$MINOR_VERSION
echo PATCH_VERSION=$PATCH_VERSION
echo DESC=$DESC
echo SNAPSHOT=$SNAPSHOT
[ -z "$SNAPSHOT" ] && echo "WARNING:$VERSION is not a snapshot version( )"
# 1
new_patch=$(expr $PATCH_VERSION + 1 )
echo new_patch=$new_patch
# ( )
release_version=$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION
#
next_relver=$MAJOR_VERSION.$MINOR_VERSION.$new_patch
[ -n "$DESC" ] && release_version=$release_version.$DESC && next_relver=$next_relver.$DESC
#####################
# ,
read -p "input release version( )[$release_version]:" input_str
check_version_format $input_str
#if [[ -n "$input_str" && -z $(echo $input_str | grep -E "$RLV_FMT_REG") ]] ;
#then
# echo "ERROR:invalid version string format( ),example: 1.0.0 OR 1.0.0.beta"
# exit -1
#fi
[ -n "$input_str" ] && release_version=$input_str
echo release_version=$release_version
# ,
read -p "input next release version( )[$next_relver]:" input_str
check_version_format $input_str
#if [[ -n "$input_str" && -z $(echo $input_str | grep -E "$RLV_FMT_REG") ]] ;
#then
# echo "ERROR:invalid version string format( ),example: 1.0.0 OR 1.0.0.beta"
# exit -1
#fi
if [ "$input_str" = $release_version ] ;
then
echo "ERROR:next version must not be same with $release_version( )"
exit -1
fi
[ -n "$input_str" ] && next_relver=$input_str
echo next_relver=$next_relver
#
#
rel_major_version=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\1/p")
#
rel_minor_version=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\2/p")
#
rel_patch_version=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\3/p")
#
rel_desc=$(echo $release_version | sed -nr "s/$RLV_FMT_REG/\5/p")
#
#
snap_major_version=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\1/p")
#
snap_minor_version=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\2/p")
#
snap_patch_version=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\3/p")
#
snap_desc=$(echo $next_relver | sed -nr "s/$RLV_FMT_REG/\5/p")
#########################
# ,
if [ -n "$(git status -s)" ] ;
then
echo "ERROR:working directory not clean,can not release( , release)"
exit -1
fi
echo " ($release_version)"
sed -i -r "s!$VERSION_REG!\1$release_version\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_MAJOR_REG!\1$rel_major_version\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_MINOR_REG!\1$rel_minor_version\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_PATCH_REG!\1$rel_patch_version\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_DESC_REG!\1$rel_desc\3!g" $version_src || exit -1
sed -i -r "s!$BEANCH_REG!\1$branch\3!g" $version_src || exit -1
sed -i -r "s!$COMMIT_REG!\1$commit_id\3!g" $version_src || exit -1
echo " release_version=$release_version"
git add $version_src || exit -1
git commit -m "release $release_version" || exit -1
release_tag=$TAG_PREFIX$release_version
echo " (release_tag=$release_tag)"
git tag $release_tag || exit -1
#
next_snapshot="$next_relver-SNAPSHOT"
# id
cur_commit_id=`git rev-parse --short HEAD`
echo " , ($next_snapshot), branch,commit_id"
sed -i -r "s!$VERSION_REG!\1$next_snapshot\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_MAJOR_REG!\1$snap_major_version\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_MINOR_REG!\1$snap_minor_version\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_PATCH_REG!\1$snap_patch_version\3!g" $version_src || exit -1
sed -i -r "s!$VERSION_DESC_REG!\1$snap_desc\3!g" $version_src || exit -1
sed -i -r "s!$BEANCH_REG!\1$branch\3!g" $version_src || exit -1
sed -i -r "s!$COMMIT_REG!\1$cur_commit_id\3!g" $version_src || exit -1
echo " "
git add $version_src || exit -1
git commit -m "next snapshot $next_snapshot" || exit -1
#echo "push "
git push || exit -1
git push origin $release_tag || exit -1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ActiveDirectory에 PowerShell로 사용자 일괄 등록사용자 계정 정보가 포함 된 CSV 파일을 준비하고 Active Directory에 일괄 등록하는 스크립트를 만듭니다. 1 행째를 헤더로 한 다음과 같은 CSV 파일을 입력 가능하고 임의로 열을 추가할 수 있다고 한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.