gpt4 book ai didi

git - 将 "current"git 标签写入文本文件

转载 作者:太空狗 更新时间:2023-10-29 14:37:45 24 4
gpt4 key购买 nike

为了标记我的软件版本,我使用了 git tags。我希望我的软件为用户显示版本,并执行一些迁移代码,这取决于当前使用的版本。

因此,我尝试使用 git-hook pre-commit 来生成文件 version.txt

#!/bin/sh
# Only show most recent tag without trailing commit information
git describe --tags | awk "{split(\$0,a,\"-\"); print a[1];}" > version.tmp

# Only proceed if version number has actually changed (i.e. a new tag has been created)
if [ ! $(cmp --silent version.tmp version.txt) ]
then
echo $?
echo Updating version.txt.
mv -f version.tmp version.txt
git add version.txt
fi

我输入命令

$ git add --all
$ git tag -a 1.0
$ git commit

原来用1.0标记的version.txt包含相应的版本,即1.0,而是以前的版本 (0.9)。

这个过程有什么问题?还有什么可能用软件保存有关 git 标签(以及提交)的信息?

最佳答案

您必须考虑提交对象以及这些对象发生了什么。

在您的一系列语句中,您将当前 HEAD 标记为 1.0,但 version.txt 包含 0.9。标记只是提交对象上的一个标记,由于文件有“0.9”,这就是被标记的内容。

然后在下一次提交时版本文件被提升到 1.0,但这是一个新的提交并且您没有更改 1.0 的标记以指向它。

看起来您正在尝试以与设计不完全相同的方式使用标签。您可能希望反转该过程,让人们更改 version.txt 文件,并使用 post-commit Hook 添加标记。我试过了,它适用于类似的东西:

#!/bin/sh

# Only show most recent tag without trailing commit information
git describe --tags | awk "{split(\$0,a,\"-\"); print a[1];}" > version.tmp

# Only proceed if version number has actually changed (i.e. a new tag has been created)
if [ ! $(cmp --silent version.tmp version.txt) ]
then
NEWVER=$(cat version.txt)
echo Adding tag $NEWVER
git tag -a $NEWVER -m ''
rm version.tmp
fi

你可能想看看标签随着提交移动的替代方案,但这也必须在提交后,因为提交前的任何标记都在当前的 HEAD 上,而不是即将要移动的 HEAD promise 。因此,为什么我必须使用上面的提交后。

我个人尽量避免自动标记/版本冲突,因为存在各种结束条件 - 修改期间会发生什么?如果他们想 rebase 怎么办?但是,每个人都有自己的用例。

关于git - 将 "current"git 标签写入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31385830/

24 4 0