gpt4 book ai didi

git - 发布的自动标记

转载 作者:IT王子 更新时间:2023-10-29 01:01:13 25 4
gpt4 key购买 nike

你如何在 git 中标记你的发布版本?

现在我用内部版本号标识了每个版本,但即使存储库中没有更改,它们也会递增。我的想法是让它在登台服务器上成功部署时自动生成。例如

  • 运行 Hudson 构建
  • 成功后,添加新标签,即1.0-1
  • 在下一个成功构建时添加下一个标签,1.0-2
  • 然后在网站页脚显示版本标签

这需要:

  • Hudson 负责管理下一个版本号
  • 或将最后一个标签存储在某个文件中的脚本
  • 或解析 git 标签以确定最后

有什么建议吗?

最佳答案

我写这篇文章是为了帮助逐步更新标签,例如1.0.1 到 1.0.2 等

2020 年更新:我在下方/here 发布了改进版本. (也值得看看@Geoffrey 在下面的回答中对分支的一些评论)。

#!/bin/bash

#get highest tag number
VERSION=`git describe --abbrev=0 --tags`

#replace . with space so can split into an array
VERSION_BITS=(${VERSION//./ })

#get number parts and increase last one by 1
VNUM1=${VERSION_BITS[0]}
VNUM2=${VERSION_BITS[1]}
VNUM3=${VERSION_BITS[2]}
VNUM3=$((VNUM3+1))

#create new tag
NEW_TAG="$VNUM1.$VNUM2.$VNUM3"

echo "Updating $VERSION to $NEW_TAG"

#get current hash and see if it already has a tag
GIT_COMMIT=`git rev-parse HEAD`
NEEDS_TAG=`git describe --contains $GIT_COMMIT 2>/dev/null`

#only tag if no tag already
if [ -z "$NEEDS_TAG" ]; then
git tag $NEW_TAG
echo "Tagged with $NEW_TAG"
git push --tags
else
echo "Already a tag on this commit"
fi

我在 6 年后重温了这个,需要编写一个类似的脚本来上传到 npm。以下代码或 here ,欢迎提出意见和建议:

#!/bin/bash

# https://github.com/unegma/bash-functions/blob/main/update.sh

VERSION=""

#get parameters
while getopts v: flag
do
case "${flag}" in
v) VERSION=${OPTARG};;
esac
done

#get highest tag number, and add 1.0.0 if doesn't exist
CURRENT_VERSION=`git describe --abbrev=0 --tags 2>/dev/null`

if [[ $CURRENT_VERSION == '' ]]
then
CURRENT_VERSION='1.0.0'
fi
echo "Current Version: $CURRENT_VERSION"


#replace . with space so can split into an array
CURRENT_VERSION_PARTS=(${CURRENT_VERSION//./ })

#get number parts
VNUM1=${CURRENT_VERSION_PARTS[0]}
VNUM2=${CURRENT_VERSION_PARTS[1]}
VNUM3=${CURRENT_VERSION_PARTS[2]}

if [[ $VERSION == 'major' ]]
then
VNUM1=$((VNUM1+1))
elif [[ $VERSION == 'minor' ]]
then
VNUM2=$((VNUM2+1))
elif [[ $VERSION == 'patch' ]]
then
VNUM3=$((VNUM3+1))
else
echo "No version type (https://semver.org/) or incorrect type specified, try: -v [major, minor, patch]"
exit 1
fi


#create new tag
NEW_TAG="$VNUM1.$VNUM2.$VNUM3"
echo "($VERSION) updating $CURRENT_VERSION to $NEW_TAG"

#get current hash and see if it already has a tag
GIT_COMMIT=`git rev-parse HEAD`
NEEDS_TAG=`git describe --contains $GIT_COMMIT 2>/dev/null`

#only tag if no tag already
#to publish, need to be logged in to npm, and with clean working directory: `npm login; git stash`
if [ -z "$NEEDS_TAG" ]; then
npm version $NEW_TAG
npm publish --access public
echo "Tagged with $NEW_TAG"
git push --tags
git push
else
echo "Already a tag on this commit"
fi

exit 0

子注:这不适用于 zsh,因为(一方面)zsh 不使用 0 索引数组。

关于git - 发布的自动标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com