【问题标题】:GIT: is a tag unique per commit?GIT:每次提交的标签是唯一的吗?
【发布时间】:2011-04-16 23:33:40
【问题描述】:

如果一个标签只能使用一次(通过提交唯一),我该如何处理标签“Version 7.3”中的 7 次提交?
我讨厌 GIT 不制作修订号(如 SVN :))。

我猜一个子问题是:
什么是“控制”版本号的最佳实践(前修订,所以我想在每次提交中保存 major.minor,并且绝对在每个分支中保存(我让每个次要分支 >= 1 个分支)。

第一个问题有一个事实答案(我认为)。
第二个更像是一个最佳实践探索。

非常感谢!我从 stackoverflow FTW 学到了很多 GIT!

【问题讨论】:

  • 你是什么意思:“我在标签版本 7.3 中的 7 次提交是什么意思”?一个标签只引用一个提交。您是在问如何处理版本 7.2 和 7.3 之间的七次提交?
  • 不管怎样,拥有修订号会阻止我们在时间线中保持提交的顺序。大多数人在创建新版本时似乎都会创建一个分支。没有理由在一个标签中不能有 7 个提交(嗯,至少在技术上:P)。签出分支仍会为您提供该版本的最新稳定版。
  • @kubi 正是我的观点:“一个标签引用一个提交”?这有点糟糕,不是吗?我想用版本“编号”(major.minor[.revision])标记我的提交。我猜你的评论回答了我的第一个问题并回答了我的第二个问题:实际版本编号该怎么做(GIT 版本控制 a23d4d3 ......等不可读!)@Chuck 你的回答带来了希望。请详细说明!我喜欢“嗯,至少在技术上”——这意味着它不是一成不变的,这在我的书中总是一件好事。问题句柄/参考点:我的提交中需要简单的版本号(>= 每个次要提交 1 次,1 次提交 = 1 次修订)
  • @Kubi 我猜你对我的意思是对的:“如何处理版本 7.2 和 7.3 之间的七个提交”> 如何保存人类可读的内容?不标记中间的 6 个修订版?
  • 正如我在回答中提到的,它被称为git describe

标签: git tags commit


【解决方案1】:

我不确定您的第一个问题是什么,但我可以为您回答第二个问题。

只需标记每个版本。 'v1.0'、'v1.1'、'v2.0'。标签与分支完全分离,因此您选择如何处理标签并不取决于您选择如何处理分支。

例如,如果您的仓库如下所示:

A--B--C--D--E  <- master
   \
    --C'-D'-E' <- test_branch

您可以将标签应用到分支E' 并安全删除test_branch,而不会丢失E' 中的代码。出于这个原因,人们很少为历史版本维护 git 分支。使用版本号标记发布,并随意删除您不再需要的任何分支。

FWIW,我也使用这种技术将我的分支保持在最低限度。如果我在一个新分支上走上一条死胡同的开发路径,我可以标记该分支(以防万一)并删除该分支。如果我再次需要该代码,我可以通过标签获取它。


编辑回复:你的 cmets。

正是我的观点:“一个标签引用一个提交”?这有点糟糕,不是吗?

我不认为它很糟糕。如果你想保持一个时间点的引用,你使用一个标签,如果你想保持对一组变更集的引用,你使用一个分支。

@VonC 提到 git-describe 是正确的。这是我用来将版本号注入所有代码的方法。向公众发布的任何内容总是会获得标签,因此git describe 返回类似“v1.0”的内容。内部测试版本将标有“v1.0-10-abcd1234”之类的标签,这表明我在 v1.0 标记之前提交了 10 次提交并提供哈希,因此我可以轻松访问它直接提交。

【讨论】:

  • 有什么理由偏爱标签而不是分支?不确定我是否理解使用标签和删除分支的意义。
  • @aidan 标签是一个指向单个提交的静态指针,一个分支指向一个提交,该提交可以随着时间的推移而改变。从长远来看,您主要需要标签来归档代码库中的重要点。分支在开发功能和其他管理时非常有用,但在共享存储库中应保持在最低限度。
  • “一个标签引用一个提交”如果我想用相同的概念标记多个提交,这令人失望。例如“需要注意”
【解决方案2】:

标签主要保留给application versioning number policy,而不是内部和技术编号(尽管kubi 在 cmets 中正确指出,您可以将它们用于任何目的)。
Annotated tags 特别是fit for publication(“推送”)。

simulate a technical revision number in Git 有一些方法,但请记住,它的分布式方面会阻止使用简单的“修订计数器”。

更一般地说,git describe is the usual way 引用包含一些有意义信息的提交。
另见"How to programmatically determine whether the Git checkout is a tag and if so, what is the tag name"

【讨论】:

  • 我不同意第一条评论。您可以根据需要使用标签。否则,git-describe 是一种以相对用户友好的方式跟踪提交的好方法。
猜你喜欢
  • 2020-01-20
  • 2016-10-11
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2017-12-22
  • 1970-01-01
相关资源
最近更新 更多