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

时间:2012-09-21 11:26:37

标签: git svn version-control

可能是一个非常基本的问题。但是,即使在阅读了多种资源后,我也无法确定。

  

在SVN中,我曾经从名为的分支创建名为 dev_tag 的标记   的 dev_branch 即可。我还要求将dev_tag签出   checkout_dir并做一个maven build。

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

重新措辞: 同意,w.r.t只是创建一个标签。我的问题更多的是

  

“假设,如果我让git repo包含主分支(对于prod   部署)和dev分支(用于QA部署)各有不同   变化。接下来,我通过使用current键入'git tag mytag'来创建标记   分支作为主人。现在到QA,我需要给出命令   只检查他们可以做mvn build的dev分支内容。   使用相同的标签,我应该能够检查主分支   可以构建和用于prod部署的内容。“

最后,这就是我为特定分支和tar创建Git标记所做的 这有助于我分别构建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

3 个答案:

答案 0 :(得分:2)

git中的代码与svn中的代码不同。它们本质上等同于固定分支(即一旦创建它们就不会随着进一步的提交而移动) - 只是指向简单提交的指针。因此,要创建标记,您可以执行以下两项操作之一 - 如果您已经签署了要标记的提交,则可以将标记放在您所在的位置:

git tag <tagname>

如果您不在标记的提交中,则需要使用git log或其他方法来查找所需提交的SHA哈希,然后您可以运行:

git tag <tagname> <sha>

(或者您可以git checkout <sha>; git tag <tagname>,但这是一次不必要的结账,如果您忘记重新结账到未来的开发工作,可能会造成混淆。

答案 1 :(得分:0)

你不能。

tag<commit-id>分。标签独立于分支存在。

答案 2 :(得分:-1)

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

然而,这不是标签使用的正常方式,这是固定的位置,但只要所有团队都了解哪些标签是固定的,以及哪些标签漂浮在你身边就应该没问题。