我的问题与git describe: inexplicable commit count和commit countcalculation in git-describe有关,但与两个问题都不完全相同。我一直在当前项目中的功能分支上进行开发,并且一直用于获取功能分支的版本号,使用最近的标签和提交计数来生成我认为会单调递增的git describe版本号。(例如,我的分支目前在 v1.1.0 之前有 96 次提交,因此我在向用户报告的版本中已将其变为“版本 1.1.0.96”。)v1.1.0-96-g1234567
现在,master 分支最近被标记为 v1.2.0,我想将 1.2 版本中所做的更改合并到我的功能分支中。所以我将 master 合并到我的功能分支中,我认为这git describe会产生v1.2.0-1-g9876543. 但相反,我得到了v1.2.0-97-g9876543。
我理解为什么会发生这种情况:正如 Git 手册中所述,git describe正在计算 产生的提交数以git log v1.2.0..9876543产生提交计数(97,因为我的分支有 96 次提交加上一次合并提交)。但我真正想要的是使用结果git log --ancestry-path v1.2.0..9876543,它只显示合并提交,因此会产生v1.2.0-1-g9876543我期望的结果。
有什么办法可以让我改变git describe使用git log --ancestry-path v1.2.0..9876543而不是的行为吗git log v1.2.0..9876543?
而且,更重要的是,按照目前的方式这样做有什么好处git describe?如果我编写自己的工具来生成我一直期望的版本编号方案,那么我会失去什么?
顺便提一句。这是 git 存储库历史记录的快照,因此您可以直观地看到我刚才描述的内容。该feature/cmdline …
git describe 记录在案以找到
可从提交中访问的最新标签。
来源: git describe --help
我有点不明白一个标签是如何从提交中到达的。在分支中运行时,我没有看到我期望的行为,我不明白为什么。
https://github.com/nodemcu/nodemcu-firmware使用发布方案,其中所有更改都进入dev分支,然后master定期恢复。版本和带注释的标签是从master. git describe继续运行master会产生预期的结果。
运行时,dev我得到了一个两年前创建的标签。
~/Data/NodeMCU/nodemcu-firmware (dev) > git describe
2.0.0-master_20170202-439-ga08e74d9
为什么是这样?
类似的情况是我们为某些用户保留的旧版本的(或多或少)冻结分支。
~/Data/NodeMCU/nodemcu-firmware (1.5.4.1-final) > git describe
0.9.6-dev_20150627-953-gb9436bdf
该分支创建之后此注释标签https://github.com/nodemcu/nodemcu-firmware/releases/tag/1.5.4.1-master_20161201和只提交了一把落在因为分支。
我用标签"Release_V1.0.0.4"标记了我的存储库.但这是我从"git describe"和"git describe origin"得到的.
[root pds_series] #git describe
Release_V1.0.0.2-22-g0859de9
[root pds_series] #git describe origin
Release_V1.0.0.2-18-gce2b24c
使用"git describe --all"和"git describe --tags",我得到了正确的标签.
[root pds_series] #git describe --all
标签/ Release_v1.0.0.4
[root pds_series] #git describe --tags
Release_v1.0.0.4
此外,通过以下命令,我得到了正确的标签.
[root pds_series] #git log --pretty = format:'%ad%h%d' - shared-commit --date = short -1
2012-11-15 0859de9(HEAD,Release_v1.0.0.4,master)
有谁知道这背后的原因?我该如何解决这个问题?
我有三个分支:dev、staging和master。当我这样做时,git describe结果是v0.1无论哪个分支被签出。
接下来我将描述进行更改以dev添加版本标签并合并staging到此master新版本的工作流程。
git checkout devgit add --all&&git commit -m 'just some testing'git tag -a v0.19.0git push && git push --tagsgit checkout staginggit merge devgit pushgit checkout mastergit merge staginggit push现在我describe在每个分支上运行:
- git checkout dev && git describe && git describe --abbrev=0
结果:
v0.19.0-1-ge147b2d
v0.19.0
我所期望的:
v0.19.0-1-ge147b2d
v0.19.0
git …我的 git 存储库遇到了一个奇怪的问题。它突然“停止”使用标签。我可以创建标签,我可以列出标签。我什至可以使用git checkout $tag或git logs $tag。但是当使用git describe --exact-match标签时就不再检测到了?这目前破坏了我的管道,因为 master 上的标记提交似乎没有标记到 git 本身?一周前,它运行得非常完美。
$ git checkout master
$ git tag my-test-tag
$ git describe --exact-match
fatal: no tag exactly matches '4b2aa1dcf70eaf61640e6a983df82e1ffe3a5812'
我已经尝试过运行git fsck --full,它只修复了一些悬空的提交,这对我来说看起来很好(因为我进行了很多变基)。
另一个有趣的事情是:该工具gitg没有显示这些“新”提交的任何历史记录。而对于“旧”承诺,一切都按预期进行。
有人知道这里发生了什么事吗?
在 3 台机器上测试,全部运行 git 版本 2.17.1。