如何仅为特定分支创建Git标签?

5

可能是一个非常基础的问题,但即使阅读了多个资源后,我也不能确定。

在SVN中,我曾经从名为dev_branch的分支创建了一个名为dev_tag的标签。 我还需要将dev_tag检出到checkout_dir并进行maven构建。

SVN - 这是我以前做过的

 ~ -> svn copy -m  svn+ssh://<repo>/branches/dev_branch/ svn+ssh://<repo>/tags/dev_tag/ 
 ~ -> svn co svn+ssh://<repo>/tags/dev_tag/ checkout_dir
 ~ -> cd checkout_dir
 ~/checkour_dir -> mvn clean package

GIT - 如何使用?

如何在Git中执行上述操作?这是我的Git现在的样子。

 ~ -> git branch -l
  dev_branch
* master

重新表述一下: 同意,只是创建一个标签。我的问题更多地是关于这个的。
假设我有一个Git仓库,其中包含主分支(用于生产部署)和dev分支(用于QA部署),每个分支都有不同的更改。接下来,我通过键入“git tag mytag”并将当前分支设置为master来创建一个标签。现在向QA方面,我需要提供命令,这些命令将仅检出他们可以进行mvn构建的dev分支内容。使用同一标签,我应该能够检出可以构建并用于生产部署的主分支内容。

最后,这就是我创建特定分支的Git标签和tar的方法,这有助于我分别构建QA和Prod代码。

QA_BUILD
git clone -b dev_branch gitserve:repo.git qa
cd qa
tag -a qa_tag
git commit -a
git push --tags
git archive --format=tar --remote=gitserve:repo.git tags/qa_tag > /tmp/qabuild/qa.tar
cd  /tmp/qabuild
tar -xvf qa.tar
mvn clean package

PROD_BUILD

git clone -b master gitserve:repo.git prod
cd prod
tag -a prod_tag
git commit -a
git push --tags
git archive --format=tar --remote=gitserve:repo.git tags/prod_tag > /tmp/prodbuild/prod.tar
cd  /tmp/prodbuild
tar -xvf prod.tar
mvn clean package

也许我还没有理解你所寻找的 - 以我的理解,你想要一个单一的标签来检出两个不同的分支?如果是这样的话,我认为这是不可能的,除非你完全忽略分支并将dev和prod保持在两个独立的目录中,但我认为这远非理想。一个标签指向一个单一的提交,它在历史图表中的一个特定位置。根据合并情况,它可能会在多个分支上,但这取决于具体情况。 - twalberg
我在我的帖子底部添加了命令。我认为这会使它更清晰。 - Gopal SA
3个回答

6

git tag <tagname>

If you don't have the commit checked out, you can specify the commit hash:

git tag <tagname> <commit-hash>

To push a tag to a remote repository, use:

git push origin <tagname>

To push all tags to a remote repository, use:

git push --tags

git tag <tagname>

如果您不在想要标记的提交位置,您需要使用 git log 或其他方法查找您想要的提交的 SHA 值,然后可以运行以下命令:

git tag <tagname> <sha>

另外一种方法是使用git checkout <sha>; git tag <tagname>,但这是一种不必要的检出方式,如果您忘记重新检出到未来开发工作所需的位置,可能会导致混淆。


同意,关于只创建一个标签的问题。我的问题更多是关于“假设,如果我有包含主要分支(供生产部署)和开发分支(供QA部署)不同更改的git存储库。接下来,我通过键入“git tag mytag”并将当前分支设置为主分支来创建一个标签。现在,对于QA,我需要给出命令,只会在他们可以进行mvn构建的dev分支上检出内容。使用相同的标签,我应该能够检出可以构建并用于生产部署的主分支内容。” - Gopal SA

4

你不能。

tag 是指向 <commit-id> 的一个标记。标记独立于分支存在。


0

可以将最新版本标记为latest(等等),然后每次发布时删除并重新创建它。

但是,这不是标签的正常使用方式,标签通常用作固定位置,只要所有团队了解哪些标签是固定的,哪些标签是浮动的,你就可以使用它们。


这是一种非常奇怪的使用标签的方式,“latest”应该是一个稳定分支的分支尖端,就像http://nvie.com/git-model中所示。 - CharlesB
1
@CharlesB,人们可能会很奇怪。有些人认为标签(甚至是签名的)更合适。我猜他们会担心人们会给他们的本地稳定分支取一个不同的名称并感到困惑。品味因人而异。 - Philip Oakley
我没有找到好的建议来模仿传统行为...只是我的个人意见。 - CharlesB
@CharlesB,我接受了。Git(分布式版本控制系统)与传统方法不同。 - Philip Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接