让我们说我大约一年前发布了我的软件版本,并在Git中以2.3的标记。
所以我不断添加功能并修复错误,在您知道之前,该软件现在的版本为3.0。但是现在我的软件版本2.3上有一个错误,需要修复的人还没准备好升级到3.0版。
就Git而言,在不改变Git仓库历史的情况下,管理将补丁应用到2.3并创建2.3.1软件的最佳方法是什么。
例如,我无法检出版本2.3,应用补丁然后将其标记为2.3.1并将其推高,因为这会创建一个新头。
开发人员通常如何管理支持其旧版本的软件?
修改
好的,所以我跟着@AnoE建议,现在我的工作流程如下修补以前的版本。欢迎提出建议。
float
我必须创建分支的原因是因为标签不会出现在我们的repo托管解决方案Kiln上。我不知道像Bitbucket或Github这样的其他提供商是否会显示没有分支关联的标签,或者这只是Git如何存储事物的副作用。当我运行git checkout v2.3.0
// Make code changes
git add -A
git commit -m "Fixed a bug in old app"
// Do something to verify the changes work on a different environment
git checkout -b v2_3_1
git tag -a v2.3.1 -m "Fixed small bug."
git push origin v2_3_1
git push --tags
时,标签会在本地显示,但通过网络用户界面无法看到。在我推开分支和标记之后,我刚刚删除了分支,它从Web UI中正确显示。
git tag -l
如果有人解释为何会发生这样的事情,我们将不胜感激。
答案 0 :(得分:9)
检查版本2.3,应用补丁,标记它2.3.1正是你要做的。
创建一个新的头(而不是一个新的分支)不是一个问题,它是git的用途。请注意,“HEAD”在git中没有结构含义,它只是突出,因为它是在当前工作目录中处于活动状态的一个提交。 Git只关心提交,从结构上来说,你可以拥有任意数量的“顶级”提交。
所以:
git checkout 2.3 # gives you a "detached HEAD"
git checkout -b dev_2.3 # a new branch, more for convenience
...modify files...
git add ... ; git commit ...
git tag 2.3.1
git branch -D dev_2.3 # get rid of it if you have a feeling that you won't be comming back soon
请记住,git中的分支和标记都没有什么特别之处。它们只是指向提交的粘滞便笺。以这种方式创建一个(可能是临时的)分支只是更方便,因为如果您正在执行的backport涉及多个快速提交,您可以轻松切换到它。
答案 1 :(得分:0)
在Git中有两种处理版本的方法:标签和分支。
标签的一个参数是它们是不可变的(你只能删除/重新创建它们,而分支可以继续增长),但是,我倾向于使用分支来发布而不是标记下面:
有人可能会争辩说,标签允许避免创建分支并使用不再使用的释放分支“污染”存储库,但这是一个小的缺点,考虑到“污染”将来自补丁,我们都知道,可以和发行版一样多:)
编辑:您可以完全避免使用分支并使用100%标签,但是,如果您必须修补旧版本,则必须重新编写和重写历史记录,这是我不推荐的内容