GPGvalidation部署脚本中的git标签

我们希望我们的部署过程直接从我们的git仓库中取出,但是只有在使用GPG签名签名(通过git tag -s )时才能激活新的更改。 我发现很less有使用git标签的GPGvalidation的工作stream的例子,所以我不确定是否有这样的“最佳做法”。

我们到目前为止看起来像这样:

 # discard erroneous local changes git reset --hard HEAD # get changes git fetch start=$(git rev-parse FETCH_HEAD) # get new tags git fetch --tags # find most recent release tag tag=$(git describe --abbrev=0 --match "release-*" $start) if git tag -v $tag; then git checkout $tag ...do stuff... fi 

这有道理吗? 特别是,为了避免从部署过程中错误的本地变化,是否正确的做? 此外,记住FETCH_HEAD似乎是必要的,在HEAD之后的其他明智的标签不显示在git describe的输出中。 有没有另外一种方法来做到这一点?

另外,如果你有一个使用签名标签进行validation的文档化部署工作stream程,我会对这个链接感兴趣。

问题的标题是关于部署工作stream程中的签名标签,但您所要求的与签名标签无关。 而实际上唯一不同的是validation标签,而且你已经这么做了。

git reset --hard HEAD不会清除任何未跟踪的本地文件,这可能会毁了您的构build过程。 在git reset --hard之后 – 你可能也想运行git clean -d -x -f

git fetch可能会获取多个分支,或者可能无法获取您期望获取的分支。 所有提取的分支将被添加到.git/FETCH_HEAD ,以避免在使用FETCH_HEAD ref时出现任何意外,我build议您明确地获取您的发布分支。 像git fetch $remote $branch

你问是否有一个“更好”的方式来做到这一点,但我个人认为这是够好的。 如果你的目标是避免不必要的提取,那么你可以使用git ls-remote的输出,但这实在是不值得的。

就个人而言,对于可重复的构build,我只是简单地在一个干净的目录中开始构build。 dir=$(mktemp -d); cd $dir; git init; git remote add ... dir=$(mktemp -d); cd $dir; git init; git remote add ...等等。 这样你也可以很容易地把这个脚本移动到不同的机器上。 为了加速初始抓取,你可以通过echo $permanent_git_directory/.git/objects > .git/objects/info/alternatesman gitrepository-layout了解更多信息)来告诉临时目录从永久本地目录中查找git对象。