使用Git进行分支/主分支标签修订增量

8
我正在尝试建立一个良好的发布管理系统,结合版本号标记的标记实践 - 例如,1.0。在该标记之后进行的任何更改都将被递增,如1.0-1、1.0-2等。
但是,如果我从主分支创建一个新的分支用于1.0发布,然后切换到该分支并将其标记为1.0,则上述系统可以正常工作。对该分支的其他错误修复将按预期显示为1.0-1、1.0-2等。
但是,除非我在制作1.0分支后的第一次提交后重新标记主分支,否则在主分支上的任何工作都将显示相同的递增:1.0-1、1.0-2。
尽管SHA1哈希将是唯一的,但我最终会从主分支和分支获得相同的修订版/递增。
是否有任何方法可以避免仅在标记分支时就将主分支标记?是否有更好的方法来完成此操作?现在,我在制作1.0分支后的唯一选择是在主分支上进行一次小的提交,然后重新标记为1.1-dev或类似内容。
然后为每个发布重复此过程。
但是,如果再次为分支打标记,例如1.0.1发布,那么这似乎也会标记主分支,因为这是首先发生的?
3个回答

6
在 Git 中,你不会给分支打标签。你会给提交打标签。如果你想要“标记”一个分支,你已经有了:分支的名称。 :)
是的,git describe 会给你提供像 1.0-2-g1ab3183 这样的提交标识符,但那些并不是标签!标签是用 git tag 创建的(谁能猜到呢),使用 git tag 创建的标签是 git describe 创建提交标识符的基础。

我完全理解标签、分支等的含义以及它们的使用方法。问题在于,当你向现有分支添加新标签时会出现问题。比如说,我创建了一个支持1.0版本的分支,而主分支则继续开发新功能等。对于1.0版本的错误修复,则在该特定分支上进行。假设我想要为发布1.0.1再次打标签或重新分支/打标签。如果我在任何分支上打标签,则我的MASTER就会显示1.0.1-1、1.0.1-2等,而我只是想在提交所在的分支上打标签。我不希望主分支和其他分支共享这样的标签。 - helion3
你的意思是 git describe 显示 1.0.1-1-2 等吗?因为它不应受到不是当前提交祖先的标签的影响(如果它在另一个分支上,并且你已经提交到两个分支,则也不应该受到影响)。 - Bombe

5
在 Git 中,你不能说某个提交“属于”某个分支。单个提交可以在多个分支上;如果提交 A 是某个分支末尾的祖先之一,我们就说它在该分支上。
正如 Bombe 在 Stack Overflow 上所说,在 Git 中你不能标记分支。你标记提交。在 Git 中,标记只是(带注释的)指向提交的指针。
在你的情况下,我想你有类似以下的东西:
                        /-- [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表示我们在 sortened SHA-1 id 为 9c116e9 的提交上,距离标记 v1.0 2 次提交。没有标记 v1.0-2
如果你希望标记只出现在“master”分支上,你可以在“maint”分支的分支点之后创建新的提交(例如,只更新 GIT-VERSION-FILE 中的默认/回退版本信息)。如果你使用“v1.0.3”标记“maint”分支上的提交,它只会从“maint”中可见。
希望对你有所帮助。

我想我表达得不够清楚。我知道你和其他人说的一切,但我的问题是,如果我在一个分支上创建一个新标签,那么在主分支上使用git describe将开始反映该新标签。实质上,我可能会在分支和主分支中都有两个1.0-1、1.0-2、1.0-3版本,而实际上它们代表了两个不同的发布版本,应该更像是1.0-1、1.1-dev-1等。我认为我唯一的解决方法就是在为发布创建分支后,在进行一次提交后重新给主分支打标签。 - helion3
只有当标记的提交也可以从'master'中获取(是'master'的祖先之一)时,才会发生这种情况。 - Jakub Narębski
不要使用来自git-description的1.0-1;将维护版本标记为1.0.1。 - Jakub Narębski

2

在git中,标签是特定提交的别名,而不是分支的别名。

标签和分支是独立的。

因此,如果您想要检出特定版本进行小修订,则可以执行以下操作:

git checkout -b new_branch_name commit_id

或者,
git checkout -b new_branch_name tag_name

两者都是指特定提交的等效方式。

进行更改,提交更改并使用次要修订版本标记提交。

然后甚至可以删除您检出的分支。


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