我正在尝试确定一个良好的发布管理系统,并结合使用版本号标记的标记实践 - 例如1.0。该标签之后的任何更改都会增加,如1.0-1,1.0-2等。
但是,如果我从master for 1.0版本创建一个新分支,然后切换到该分支并将其标记为1.0,则上述系统工作正常。该分支上的其他错误修复按预期显示,1.0-1,1.0-2
但是,除非我在制作1.0分支后第一次提交后重新标记主服务器,否则主服务器上的任何工作也将显示相同的增量:1.0-1,1.0-2
当然,sha1哈希将是唯一的,但我最终会从master和branch获得相同的修订/增量。
当我标记分支时,有没有办法避免master被标记?有没有更好的方法呢?现在,我在创建分支1.0之后的唯一选择是在master上进行一次小的提交,然后为1.1-dev或其他东西重新标记它。
然后重复每次发布。
然而,如果一个分支再次被标记,比如1.0.1版本,那么它似乎也会标记master,因为那是先发生的事情?
答案 0 :(得分:5)
在Git中你没有标记分支。你标记提交。如果你想“标记”你已经拥有的分支:分支的名称。 :)
是的,git describe
为您提供1.0-2-g1ab3183
之类的提交标识符,但这些标识符不是标记!标记是使用git tag
(已经猜到了)完成的,使用git tag
创建的标记是提交标识符git describe
创建的基础。
答案 1 :(得分:4)
在Git中你不能说某些提交属于到某个分支。单个提交可以在多个分支上;如果提交A是分支尖端的祖先之一,我们说它在给定的分支上。
作为Git中的Bombe said,您不会标记分支。你标记提交。在Git中,tag只是(注释)指向提交的指针。
在你的情况下,我认为你有类似下面的内容
/-- [v1.0] v ---.---.---.---X---.---A <-- master \ \-.---B <-- maint
让我们提交'X'由标签'v1.0'指向。此提交在分支'master'和分支'maint'上。如果你在提交'A'('master'分支的顶部)之上运行“git describe”,你会得到像v1.0-2-g9c116e9
这样的东西。如果你在提交'A'('maint'分支)之上运行“git describe”,你会得到类似v1.0-2-g3f55e41
的东西(至少使用默认的git-describe配置)。请注意,此结果略有不同。 v1.0-2-g9c116e9
表示我们在提交时使用已分类的SHA-1标识9c116e9
,在标记v1.0
之后提交2次。没有标记v1.0-2
!
如果您希望标记仅出现在分支“master”上,则可以在“maint”分支的分支点之后创建新提交(例如,仅在GIT-VERSION-FILE中更新默认/回退版本信息)。如果你在'maint'分支上标记提交,例如'v1.0.3`它只能从'maint'中看到。
HTH
答案 2 :(得分:2)
在git中,tag是特定提交的别名,而不是分支的别名。
标签和分支是独立的。
因此,如果您想要签出特定版本以对其进行小修改,那么您可以执行以下操作:
git checkout -b new_branch_name commit_id
或者,
git checkout -b new_branch_name tag_name
两者都是引用特定提交的等效方式。
进行更改,提交更改并使用次要版本标记提交。
然后你甚至可以删除你签出的分支。