我正在寻找将git分支转换为git标签的最佳和最安全的方法.当手动移植到svn存储库时,我基本上复制了我们所有的分支,并且我们为每个次要版本(1.1,1.2,1.3)都有一个分支,这一点可能并不是最好的方法,但为了速度,我对分支比当时的标签更舒服.我现在有分支1.5,1.6,1.7,1.8但是因为我们在任何给定时间只有1个版本的代码部署,我可能只需要最后一个版本作为分支,因为任何热修复需要进入该版本部署.所以我正在寻找将git分支转换为git标签的最佳方法.我想我有办法,但确定它有多好.
到目前为止我所做的是每个我想转换为标签的分支,我已经检查过以确保那些不在master分支中的分支中没有提交,所以我做了:
git log 1.5 ^master
git log 1.6 ^master
git log 1.7 ^master
Run Code Online (Sandbox Code Playgroud)
所有这些都没有给我任何回报,我认为这意味着这些分支中的所有提交都存在于master中.我这样做是因为我假设如果那些分支中的提交不在master中,我会在将分支转换为标记时丢失它们,因为标记只是一个提交而不是开发线的"指针".看起来很好,我的假设是我只需做:
git tag 1.5v 1.5
git tag 1.6v 1.6
git tag 1.7v 1.7
Run Code Online (Sandbox Code Playgroud)
然后我只需要在本地删除分支并将这些更改推送到远程存储库.这是将git分支转换为git标记的最佳方法吗?
我还有一个问题是,如果有人从1.7开始创建一个分支(没有人应该这样做)并且他们拉出删除该分支的更改,他们是否能够将这些更改合并到另一个分支(比如master)或者那种打破他们创建的分支?这是一个不应该发生的情况,因为除了最后一个版本之外没有人应该创建任何分支版本的分支,在这种情况下为1.8,但是人们并不总是正确地遵循过程,所以我想确保有一种方法如果它发生,解决这个问题.
我做了一个无意中命名为"0.2"的git分支,它也是一个标签.
所以我试图从原点删除它:
$ git branch -rD origin/0.2
Deleted remote branch origin/0.2
Run Code Online (Sandbox Code Playgroud)
但是之后:
$ git fetch origin
* [new branch] 0.2 -> origin/0.2
Run Code Online (Sandbox Code Playgroud)
这是我推动时的错误:
$ git push --force origin :0.2
error: dst refspec 0.2 matches more than one.
Run Code Online (Sandbox Code Playgroud)
所以我删除了远程标签:
$ git tag -d 0.2
$ git push origin :refs/tags/0.2
Run Code Online (Sandbox Code Playgroud)
仍然没有去:
$ git branch -rD origin/0.2
* [new branch] 0.2 -> origin/0.2
Run Code Online (Sandbox Code Playgroud)
我正在使用标签来识别发布版本并识别任务的"开发完成"提交.做一个git tag我得到如下列表.
> git tag
v0.1.0
task_1768
task_2011
task_1790
task_1341
v0.1.1
task_2043
task_2311
v0.1.2
Run Code Online (Sandbox Code Playgroud)
假设所有标签都指向master分支上的提交,有没有办法列出所有标签,因为有些标签?例如,要生成v0.1.2发布中包含的所有任务的列表- 我正在寻找类似下面的内容(这不是实际的命令).
> git tag -l "task_*" --since v0.1.1
Run Code Online (Sandbox Code Playgroud)
获得如下输出.
task_2043
task_2311
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点git tag?
有没有办法做到这一点git rev-list?
(或者其他一些git命令?)
根据答案和评论,以下是我目前正在使用的内容.
> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }'
task_2043
task_2311
v0.1.2
> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }' …Run Code Online (Sandbox Code Playgroud) 在我们公司,我们使用Git标签来触发生产构建.我刚刚在本地创建了一个标签
git tag -m "Tag message"
Run Code Online (Sandbox Code Playgroud)
但是我意识到我犯了一个拼写错误,如果我共享标签(将其推送到远程),将会破坏生产版本.
我可以删除或修改标签,因为我可以使用提交吗?我还没有将标签推送到远程存储库.
我曾经git tag --force移动标签,现在我想在移动之前知道标签在哪里。
我在手册页和网站Pro Git § 2.6 Git Basics - Tagging 中都没有找到任何内容。
之前似乎没有人发布过这个问题。
一些背景:
我目前有两个本地 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 列出。
我必须获取在 Git 存储库上创建新标签时作为一部分的所有新提交。这需要通过 GitHub API 来完成。
例如,Git UI 说 Tagging Tag1 并有一个与之关联的 sha...假设 sha 是:SHA1
现在我如何通过 GitHub API 获取所有发生的或属于 Tag1 的提交?我想存储所有这些提交并对它们进行一些分析。
我想标记我项目的所有子模块.我尝试这样做:
git submodule foreach git tag tagName
Run Code Online (Sandbox Code Playgroud)
......但它似乎只是没有错误地返回,没有做任何事情.
编辑:以下是我尝试的结果:
有人能告诉我如何正确标记所有子模块吗?
注:这是一个非常类似的问题到这个职位,但是对于一个答案建议依靠超级项目的子模块裁判.但是,我实际上喜欢子模块的repo中的标签.
是否有在monorepos中使用版本标签的标准?是否符合1.0.0-myapp1和2.1.0-myapp2可接受的东西?还是有另一种方法来区分应用程序之间的版本?
在我正在工作的这个项目中,我们根据标签进行部署。虽然标签必须针对 master 分支完成(在您合并发布之后),但有时有人可能会错误地针对 dev 或 release 分支进行标记,这是不正确的。这会导致几个问题。
在我们的部署脚本中,有一个步骤是我们从 git 克隆特定标签,使用的过程类似于此问题中描述的过程:使用 Git 下载特定标签
$ git clone
$ git checkout tags/<tag_name>
Run Code Online (Sandbox Code Playgroud)
如何修改此脚本以检查此标记是否实际上是针对 master 分支完成的?如果分支不是主分支,我想然后停止部署并抛出错误。
谢谢。
git-tag ×10
git ×9
dvcs ×1
git-branch ×1
git-commit ×1
git-describe ×1
git-remote ×1
git-rev-list ×1
github ×1
github-api ×1
gitversion ×1
repository ×1
tags ×1
version ×1