在以下几行中:
$ git tag -n1
v1.8 Tagged the day before yesterday
v1.9 Tagged yesterday
v2.0 Tagged today
$ git describe
v1.9-500-ga6a8c67
$
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么"git describe"不使用v2.0标签,以及如何解决这个问题?v2.0标签已被推送,所以我猜我不能删除并重新添加它.
如何从(非签出)远程仓库中获取最后一个标签?
在我的本地副本上我使用 describe
git describe --abbrev=0 --tags
Run Code Online (Sandbox Code Playgroud)
但我无法使用describe远程存储
$ git describe --tags --long
test-1-g3c31c73
\_ ???
Run Code Online (Sandbox Code Playgroud)
这g3c31c73似乎没有任何意义...... 文档说它是最近提交的缩写对象名称,但它不是HEAD提交哈希,并且find .git/objects -type f | grep g3c31c73什么也没找到.
问题是:在将其合并到标记后,如何实现正确的版本(显示为git describe)developmastermaster?
我使用常见的git分支 - master用于生产.比方说,git describe节目1.5上master,,并与合并后的develop, master节目1.5-234-g1e894af.
所以我创建了一个新的带注释的标签,git tag -a 1.6因此git describe master现在显示1.6.
但是:git describe develop仍然显示1.5-something,这对我来说很奇怪 - 它有同样的提交master- 为什么Git认为它仍然属于1.5版本?
没有更好的东西进入我的大脑,所以我只是将master合并到develop中,然后开发显示1.6-2-...可接受的版本但产生1次无用的合并提交,并警告我"通过递归合并",我认为这对我来说没有意义做,但如何实现正确的版本呢?
我刚刚发现了一个--dirty选项git describe,它看起来应该做一些非常有用的东西,即git describe在工作树变脏时将输出附加一个后缀,但是在我的一些存储库中似乎不是这样的:
$ git status
# On branch 8.30
nothing to commit (working directory clean)
$ git describe --dirty
8.30rel-8-g9c1cbdb-dirty
Run Code Online (Sandbox Code Playgroud)
我认为这可能是因为工作目录相对于标记是脏的,但似乎也不是这种情况:
$ git status
# On branch 1.4
nothing to commit (working directory clean)
$ git describe --tags --dirty --long
1.4rel-0-gfedfe66-dirty
Run Code Online (Sandbox Code Playgroud)
我过去hg id常常使用Mercurial并且喜欢它的默认行为是为+它为脏存储库报告的任何提交哈希添加后缀这一事实,所以一直在寻找git等价物,但是git describe --dirty没有在给出文档时,似乎做了我期望的事情:
Run Code Online (Sandbox Code Playgroud)--dirty[=<mark>] Describe the working tree. It means describe HEAD and appends <mark> (-dirty by …
一些背景:
我目前有两个本地 git 存储库,它们指向同一个源/主项目。我有两个 git repos 的原因是我有一个干净的主副本,我可以在需要时随时使用,还有一个副本可以在我的沙箱中应用更改、提交等。这可能有点矫枉过正,但有一些优点对我个人来说,有一个重复的本地 git 副本。
一位同事最初为 1.0.2 创建了一个轻量级标签,但我们将其删除并重新标记为具有相同编号的带注释版本。他们通过 git push 将更改提交到远程仓库。我在我的本地 git 实例上拉下了最新的更改。
我们的标签如下:
release-1.0.0
release-1.0.1
release-1.0.2
Run Code Online (Sandbox Code Playgroud)
问题:
这是我无法弄清楚的问题。当我运行“ git describe”时,我的沙箱存储库会显示最新的标签版本(release-1.0.2)。这是我所期望的。但是,当我执行“ git describe”时,我只从其中提取的干净存储库副本显示旧标签(版本 1.0.1)。我验证了两者都指向原始主人。我做了一些更多的研究,发现了一个overstack 解决方案,它指出我运行“git cat-file -t”。这是我注意到的不同之处:
git cat-file -t release-1.0.1 --> tag
git cat-file -t release-1.0.2 --> commit
Run Code Online (Sandbox Code Playgroud)
git describe与沙箱存储库不同,为什么我的干净副本存储库在运行“ ”时显示旧标签版本?如果我git describe --tags在干净的 repo 副本上运行“ ”,我可以确认我可以看到 release-1.0.2 列出。
我需要在我的应用程序中显示“构建版本”。为此,我使用 npm 包“git-describe”,它从最后一个 Git 标签获取当前 Git 提交的“距离”。它在本地运行良好,其中 .git 文件夹与源代码一起可用。但在服务器上,它不起作用,可能是因为“.git”文件夹不是部署代码的一部分。因此,我在 package.json 中添加了一个脚本,将“距离”写入文件,以便代码稍后可以读取其值以显示在应用程序中。
我假设“.git”文件夹可用于在 CodeBuild 期间执行 git 命令。因此,我将上述 package.json 脚本添加到 AWS CodeBuild 管道中。但我认为我错了,因为 git 命令似乎在服务器上不起作用。
有人可以建议我如何实现所需的功能吗?
我正在考虑使用git describe来生成自动版本号。正如这里的建议。
我的问题是,如果我得到 o/p 的git describeas v2.0-64-g835c907,我将来如何使用 git 签出该特定修订号?
git describe是否有语法显示仅最新标签和其他提交?
让你得到
4.0.74.0.7
4.0.7-12自提交标记以来已进行12次提交4.0.7
git describe --tags与之非常接近,4.0.7-12-g09181但我还没有找到摆脱附加的哈希的方法。
git describe --tags --abbrev=2
Run Code Online (Sandbox Code Playgroud)
仍然显示 4.0.7-12-g0918
git describe --tags --abbrev=0
Run Code Online (Sandbox Code Playgroud)
4.0.7仅显示。
我有一个脚本需要在远程 git 存储库的特定分支上快速收集“git describe”的输出,以便设置环境变量。
这样做的明显方法是执行“git clone”以下载存储库,然后 cd 进入创建的 git 存储库文件夹并执行
export GIT_DESCRIBE_STR=`git describe`
Run Code Online (Sandbox Code Playgroud)
...但我真的不喜欢这种方法,因为它有太多的开销;特别是,'git clone' 命令每次运行时都会下载数百兆字节的 git 存储库数据,只需运行git describe一次该命令;之后将不会使用下载的数据。
我的问题是,有没有办法在远程存储库上运行“git describe”?与此等效的东西,这当然不起作用,因为我刚刚编造了它:
git describe --repository=https://my.server.com/r/myproject/myproject.git --branch=master
Run Code Online (Sandbox Code Playgroud) git ×10
git-describe ×10
git-tag ×3
command-line ×1
git-branch ×1
git-checkout ×1
git-hash ×1
master ×1
tags ×1
version ×1