我有一个问题,我在一个分支中开发我的应用程序,然后当我完成之后,我将该分支合并到我的 master 中。我从主人创建一个标签。
在生产环境中,我的工作区中有这个我的应用程序 git 存储库。当我发布新版本时,我可以直接进入那个目录,签出我创建的标签吗?
ps,我认为这种方式可以工作,但以下让我感到困惑。
$ git branch
* (no branch)
master
我找不到我在生产环境中使用的标签,有什么方法可以显示我正在使用的标签吗?
我有一个问题,我在一个分支中开发我的应用程序,然后当我完成之后,我将该分支合并到我的 master 中。我从主人创建一个标签。
在生产环境中,我的工作区中有这个我的应用程序 git 存储库。当我发布新版本时,我可以直接进入那个目录,签出我创建的标签吗?
ps,我认为这种方式可以工作,但以下让我感到困惑。
$ git branch
* (no branch)
master
我找不到我在生产环境中使用的标签,有什么方法可以显示我正在使用的标签吗?
在生产环境中,我的工作区中有这个我的应用程序 git 存储库。当我发布新版本时,我可以直接进入那个目录,签出我创建的标签吗?
是和不是。
Git 假设您希望根据当前签出的版本进行新工作。标签是不可变的(不可更改的),因此您不能对标签进行新的工作。因此,当你这样做时会发生什么
$ git checkout <tag>
是 Git 会检查所述标签的状态并为您创建匿名分支(在 git 文档中称为“分离的 HEAD<tag>
”),从 开始,您可以在其中创建新工作。
这就是您(no branch)
在git-branch输出中看到的原因:
$ git branch
* (no branch)
master
“分离的 HEAD”的概念在 IMVHO “简化的 Git 概念”,“分离的 HEAD 和所有这些”部分中得到了很好的解释(带有图表) ,其中git checkout v1.0
详细解释了操作。
我找不到我在生产环境中使用的标签,有什么方法可以显示我正在使用的标签吗?
如果您使用带注释/签名的标签(使用or创建),或者使用轻量级标签,则可以使用git-describe 。git tag -s
git tag -a
git describe --tags
例如你会得到
$ git describe
<tag>
如果您直接在标签上。
you can use git describe --abbrev=0
to display the most recent tag from current commit.
So if you have e.g
tag v1.00
tag v1.01
tag v1.02
tag v2.00
and you git checkout v1.01
, git describe --abbrev=0
will result in:
v1.01
是的,这就是它的用途。一定要推/拉标签,因为它们不是默认的。