9

问题是:在我将其合并并标记后,如何获得正确的版本(用 显示git describedevelopmastermaster?

我使用通用 git 分支 -master用于生产。假设 show on和,与git describeshows合并后。 所以我创建了一个新的带注释的标签,因此现在显示.1.5master,develop, master1.5-234-g1e894af
git tag -a 1.6git describe master1.6

但是:git describe develop仍然显示1.5-something,这对我来说很奇怪-它具有与中相同的提交master-为什么 Git 认为它仍然属于1.5版本?

没有什么比这更好的了,所以我只是将master合并到develop,然后develop显示1.6-2-...可接受的版本,但会产生1个更多无用的合并提交,并警告我“递归合并”我也认为没有意义做,但是如何实现正确的版本呢?

4

2 回答 2

3

听起来您对 git 的使用有问题。如果你正在合并developmaster,但从不master合并develop,那么master可以自由地发散——任何更改master不会进入develop分支。因此,您关于他们具有相同提交的声明是错误的。使用 VonC 的图,

m(1.5)--m1--m2--m(1.6, master)
 \              / 
  d-------d----d (develop)

我标记为“m1”和“m2”的提交永远不会进入“develop”。如果没有这样的提交——你没有在 master 上工作——那么当你将 develop 合并到 master 时,它应该是一个快进合并;那时他们有相同的提交,并且一切都会如您所描述的那样工作。

当然,解决方案取决于您尝试实现的工作流程。

  • 就我个人而言,此时我会develop从 master 开始删除并重新创建分支,或者将其快进到1.6,这样当您继续工作时,develop您就会拥有以下结构:

    m(1.5)--m1--m2---m(1.6, master)
     \              / \ 
      d-------d----d   d--d (develop)
    

    然后git describe会认为它实际上是基于 1.6 的。

  • 如果您的意图是这develop是一个持续开发分支,并且master是偶尔的“发布”分支,那么您应该避免创建任何提交,例如 m1 和 m2;git describe就你而言,准确地告诉你有些东西是不同的

我不是在团队中使用 git 的专家,所以对这一切持保留态度。

于 2012-02-05T20:19:53.590 回答
2

考虑git describe到“查找可从提交中访问的最新标签”,似乎可以在尚未设置新标签的git describe提交处develop返回。master1.6

m(1.5)--m--m--m(1.6, master)
 \            / 
  d-------d--d (develop)          => git describe develop will return 1.5-xxx

合并master后开发

m(1.5)--m--m--m(1.6, master)
 \            / \
  d-------d--d---d (develop)      => git describe develop will return 1.6-xxx

如果其他贡献者没有在工作develop,您可以考虑在 之上重新设置分支 以便取回您期望的标签。( git rebase )developmaster

m(1.5)--m--m--m(1.6, master)
               \            
                d--d--d (develop) => git describe develop will return 1.6-xxx
于 2012-02-05T19:40:26.520 回答