2

我正在使用语义发布进行版本控制。每当我将某些东西推送到我的分支时,CI (Gitlab) 都会执行语义发布。我的问题是我推送到我的 git 分支,语义发布创建了一个版本并创建了标签(例如 1.0.0)。最后,我发现我错过了对这次提交很重要的一些东西。所以我删除了 Gitlab 中的标签(Repository > Tags,例如https://gitlab.com/user/project/-/tags),最后再次推送我的提交。但是现在,semantic-release 告诉我标签已经存在,但 Gitlab 不再显示任何标签(我删除了所有标签)。现在我决定将以下行添加到我的 CI:

git show-ref --tags -d

这显示了我已经在 Gitlab 中删除的所有标签,但它们似乎存在于我的 CI 中。所以我很困惑这里发生了什么......有什么想法吗?我的 CI 中是否需要“同步标签”之类的东西?

4

2 回答 2

1

为了解决这个问题,我使用这个解决方法从原始所有标签同步:

- git tag --delete $(git tag) # delete all local tags  
- git fetch --all
于 2021-08-31T11:08:10.647 回答
0

Git 是一个分布式源代码控制存储库,这意味着任何配置为跟踪远程存储库(可以是 Gitlab、Github、另一台个人计算机等)的本地存储库。每个存储库独立运行,但可以在它们之间推送或拉取更改。

例如,当您在本地更改文件并提交它们时,它们只存在于您的存储库中,直到您将它们推送到远程(通常是 Github、Gitlab 等)。然后,这些更改将在您本地和 Gitlab 上进行。如果其他人随后git pull从 Gitlab 远程执行操作,则更改也将在他们的本地环境中。

同样,在 Gitlab 中删除标签只会将它们从该存储库中删除,而不会从其他任何地方删除。如果一个标签已在遥控器上被删除,而您明智地在本地删除它,最直接的方法是git tag --delete|-d tag1 tag2 ...,但您必须知道标签是什么。

如果您正在运行 git 2.17 或更高版本,您可以传递一个标志来git fetch修剪标签,就像它可以使用分支一样: git fetch --prune --prune-tags. 该--prune选项会删除远程中不存在的任何本地分支,--prune-tags并对标签执行相同的操作。

以下是一些相关的有用 SO 问题:

删除不再在远程存储库上的本地 git 标签

在 git 中,如何将我的标签与远程服务器同步?

于 2021-02-15T20:31:45.093 回答