我有一个带有git分支模型的项目,该模型大致遵循nvie的git-flow的模型。
我们的发行分支以SemVer格式命名,例如v1.5.2
一旦发布分支允许生产,我们就关闭该分支,方法是将其合并到master中,应用标签,然后删除该分支。
当我们立即删除发布分支时,我们一直在使用相同的标识符来标记分支,例如 v1.5.2
这是我们用于关闭发布分支的命令:
$ git checkout master
$ git merge v1.5.2
$ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc"
$ git branch -d v1.5.2
$ git branch -dr origin/v1.5.2
$ git push origin :v1.5.2
$ git push
$ git push --tags
这似乎在大多数情况下都可行,但是在git repo的另一个实例(例如,另一个开发机器或暂存环境)具有v1.5.2分支的本地检出的情况下,这会引起问题。
该git push origin :v1.5.2
命令将删除远程分支中的分支,但不会在所有存储库中删除分支的本地版本(如果存在)。
v1.5.2
在这些存储库中尝试签出时,这会导致模棱两可的引用:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
如果不对分支使用不同的语法(例如release-v1.5.2
或),是否可以避免这种情况v1.5.2-rc
?
还是不可避免,因此创建与已删除分支同名的标签从根本上是一个坏主意?
git checkout
当存在不明确的引用时,它将在分支上检出标签,但这不是我所看到的行为,参见:gist.github.com/tommarshall/9376724。这在更现代的git版本中有所改变吗?我可以设置一个标志gitconfig
来获得此行为吗?