Gitlab-CI 中存在已删除的标签
Posted
技术标签:
【中文标题】Gitlab-CI 中存在已删除的标签【英文标题】:Deleted tags are present in Gitlab-CI 【发布时间】:2021-05-08 20:05:32 【问题描述】:我正在使用语义发布进行版本控制。每当我将某些东西推送到我的分支时,CI (Gitlab) 都会执行语义发布。我的问题是我推送到我的 git 分支,semantic-release 创建了一个版本并创建了标签(例如 1.0.0)。最后,我发现我错过了对这次提交很重要的一些事情。所以我删除了 Gitlab 中的标签(Repository > Tags,例如https://gitlab.com/user/project/-/tags),最后再次推送我的提交。但是现在,semantic-release 告诉我标签已经存在,但 Gitlab 不再显示任何标签(我删除了所有标签)。 现在我决定将以下行添加到我的 CI:
git show-ref --tags -d
这显示了我已经在 Gitlab 中删除的所有标签,但它们似乎存在于我的 CI 中。所以我很困惑这里发生了什么......有什么想法吗?我的 CI 中是否需要“同步标签”之类的东西?
【问题讨论】:
【参考方案1】:Git 是一个分布式源代码控制存储库,这意味着任何配置为跟踪远程存储库(可以是 Gitlab、Github、另一台个人计算机等)的本地存储库。每个存储库独立运行,但可以在它们之间推送或拉取更改。
例如,当您在本地更改文件并提交它们时,它们只存在于您的存储库中,直到您将它们推送到远程(通常是 Github、Gitlab 等)。然后,这些更改将在您本地和 Gitlab 上进行。如果其他人随后从 Gitlab 远程执行 git pull
,则更改也将在他们的本地环境中。
同样,在 Gitlab 中删除标签只会将它们从该存储库中删除,而不会从其他任何地方删除。如果一个标签已经在遥控器上被删除,而你最好在本地删除它,最直接的方法是git tag --delete|-d tag1 tag2 ...
,但你必须知道标签是什么。
如果您正在运行 git 2.17 或更高版本,您可以将标志传递给git fetch
,它将像使用分支一样修剪标签:
git fetch --prune --prune-tags
。 --prune
选项删除远程中不存在的任何本地分支,--prune-tags
对标签执行相同操作。
以下是一些相关的有用 SO 问题:
Remove local git tags that are no longer on the remote repository
In git, how do I sync my tags against a remote server?
【讨论】:
【参考方案2】:为了解决这个问题,我使用这个变通方法从原始所有标签同步:
- git tag --delete $(git tag) # delete all local tags
- git fetch --all
【讨论】:
以上是关于Gitlab-CI 中存在已删除的标签的主要内容,如果未能解决你的问题,请参考以下文章
Gitlab-ci:如果 MR 存在则触发 merge_request 分离管道,如果不存在则触发源分支管道。这两条管道不应同时运行