【问题标题】:using bash to increase release version and git push使用 bash 增加发布版本和 git push
【发布时间】:2022-01-05 15:34:48
【问题描述】:

我是 BASH 的初学者 我正在尝试自动化以下过程:

  • 获取发布版本 --> 文件“发布”
  • 增加它
  • 在同一个文件“release”中再次保存
  • git 全部添加
  • git commit "releaseX"
  • git 推送

我将把这个文件称为 releaseit.sh

为此,我从以下代码开始: Extract version number from file in shell script

BASH:
read version < release
echo $version
echo ${version%.*}.$((${version##*.}+1)) 

如何将最后一行传递给变量并再次将其保存到发布文件中?

期望的结果: 如果发布包含 0.1.34,则将添加一个包含 0.1.35 的新发布文件并提交并推送。

【问题讨论】:

  • 您可以使用&gt; 将输出写入文件,因此如果您的最后一个echo 打印在控制台中看起来正确,您只需将&gt; release 添加到该行的末尾(然后@ 987654326@).
  • 不要这样做。请将版本号存储在文件中。 (尽管有这么多项目这样做,但这是一种糟糕的做法。)。不应将版本号存储在文件中,而应从 VCS 派生它。 (例如,通过git describe
  • 但它不允许我覆盖文件
  • @WilliamPursell 这不在我手中,我在一个系统中工作,其中发布由发布文件中存储的数字控制,只有当这个数字发生变化时,才会部署库的版本给大家。
  • @JFerro。你需要让在这个系统上工作的人相信这个系统已经坏了。将版本存储在这样的文件中是一个地雷。这是灾难的秘诀。这是一座漂浮的冰山,等待击沉你的船。该项目注定失败!

标签: bash git


【解决方案1】:

不管你是否应该这样做的讨论,你可以这样做:

#!/bin/bash

read version < release
echo $version
nextversion=${version%.*}.$((${version##*.}+1))
echo "$nextversion" >release

与上面 Stanislav 的回答相同,只是将其存储在一个变量中,如果您稍后在脚本中需要它。

【讨论】:

  • @Williampusel 实际上这正是所需的功能。再次说明上下文:我们在谈论 python,而不是编译。其次在jupyter环境中。因此,一个单一的编码器正在推动一个阿尔塔斯语的回购(当然是在本地),最多可能有两个编码器一起工作。我不是在谈论专业的 CS 背景人员。那些“破解”并希望通过 python 模块为其他同事提供解决方案的人。编码人员在决定下一次提交是否为新版本做好准备之前多次推送。
  • 只有这样 Jenkins 才会被解雇以通过所有测试,从那一刻起,办公室中安装库的其他任何人都将获得新版本。人们通常对 git 知之甚少。推送克隆提交,仅此而已。情况就是这样。
【解决方案2】:

你真的不想这样做。版本号不应存储在 repo 的文件中,因为这样做会导致 repo 中的多个提交都共享相同的版本。这是灾难的秘诀。但是,如果您确实想这样做,您可能需要以下内容:

#!/bin/sh

version_file=release

if test "$1" != "-f" && git rev-parse HEAD > /dev/null 2>&1 \
        && ! git diff-index --quiet HEAD; then
    echo 'Repo is dirty.  Aborting' >&2
    exit 1
fi

IFS=. read maj min patch < "$version_file"

if { ! test "$maj" -ge 0 || ! test "$min" -ge 0 || ! test "$patch" -gt 0; } 2>/dev/null; then
    echo "Invalid version in $version_file.  Aborting" >&2
    exit 1
fi
case $1 in
maj) : $(( maj += 1 ));;
min) : $(( min += 1 ));;
*) : $(( patch += 1 ));;
esac

ver="$maj.$min.$patch"
echo "$ver" > "$version_file" || exit
git add "$version_file" || exit
git commit -m "Increment version to $ver" || exit
git push || exit

【讨论】:

    【解决方案3】:

    只需使用&gt; 覆盖文件内容即可:

    read version < release
    echo ${version%.*}.$((${version##*.}+1)) > release
    

    但我同意 cmets - 您不应该将构建版本存储在 Git 中,请阅读 this

    【讨论】:

    • 添加了链接。该版本应在构建期间添加,并且应来自您的构建服务器。
    • @JFerro 您不要更改版本号。 git repo 将版本号存储在标签中。制作新版本应该涉及标记提交。如果你需要一个数字,你应该用git describe从git派生出来。
    • @WilliamPursell,在大多数情况下,即使将其放入标签中似乎也太过分了。让 Git 不了解它。
    • @JFerro,我找不到这样做的理由。通常我想找到构建二进制文件的提交。该提交通常存储在构建的二进制文件中。理想情况下,它应该在应用程序的 UI/REST 端点中公开。
    • 你为什么说把它放在标签里似乎过分了? FWIW,这是我见过的最常见的技术。 Git project itself 正是这样做的:发布被标记为 vX.Y.Z。正如@WilliamPursell 所说,标签发布与git describe 很好地集成在一起,它根据最近的标签为任意提交生成标签,因此标签在语义上是有意义的,并且像SHA-1 哈希一样是独一无二的。
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2020-05-13
    相关资源
    最近更新 更多