我在一个拥有大型Java代码库(300k +代码行)的团队中工作,最近采用Git作为源代码控制(从ClearCase迁移).我们使用Git Flow作为我们的分支策略.有一些我们经常遇到的用例,我们一直在努力.
我们已将所有功能合并到开发分支中,以便在即将发布的版本中使用.当我们接近发布时,事实证明一个功能无法上线(由于客户端没有准备好,或者其他原因).创建发布分支的最佳方法是什么,但省略了一个特定功能(跨多个提交)?该功能需要包含在下一个版本中.我们之前尝试过的是在所有提交上执行"git revert",创建release分支,然后在恢复的提交上执行"git revert".这是一种非常痛苦的方法,特别是对于大型功能.
我们已经创建了发布分支,但在发布之前,确定需要删除一个功能.与第一个用例类似,此功能需要能够进入以下版本.因此,在提交中执行"git revert"并不能完全解决它,因为当我们执行"git flow release finish"时,恢复将返回合并到develop分支中.
如Git Flow模型中所述,所有提交都是在功能分支上进行的,而不是直接在开发分支上进行.当某个功能完成并准备好下一个版本时,它将被合并以进行开发.在下一个版本的时候,发布分支是由开发创建的.在对发布进行回归测试并在必要时进行修复之后,它将进入生产阶段并合并到master,然后在发生错误修复的情况下重新开发,并标记版本号.当我们认为在下一个版本中出现的功能最终需要被忽略时,上述问题就出现了.
处理这些情况的最佳方法是什么?在这两种情况下,分支机构已经被许多开发人员发布和删除,因此弄乱历史可能会造成困难.我知道这些不太理想,但不幸的是情况已经超出我们的控制范围.
假设我的主分支(devlop)和我的功能分支都有活跃的开发.两者都在不断添加迁移.在将功能分支合并到主分支之前,我将把它重新绑定到主分支上.
因此,在最近的开发分支迁移之后,所有功能分支迁移才有意义.
有没有方便/建议的方法来重命名这些文件?我可以生成虚拟迁移并重用为它们生成的时间戳 - 但我想知道是否有一个我不了解的最佳/常见做法?
有没有办法建立一个分支,只能合并,而不是推入?此外,有没有什么方法适用于BitBucket,GitLab或GitHub?
我们处理功能分支,将它们推送到BitBucket/GitLab/GitHub(取决于项目),然后将它们合并到一个名为"development"的集成分支中.我想阻止人们直接推动'发展'.
BitBucket有一种限制对分支机构的访问的方法,但它也阻止了人们也能够进行合并请求.
在我的公司,我们有一个CI/Build服务器,我们用它来测试和构建版本(以及功能和开发分支).在git flow分支模型中,当它是时候释放你分支开发并命名它(例如)release-1.4.然后,CI/Build服务器将自动构建分支,我们将其部署到临时服务器以进行手动集成测试.一旦我们对构建感到满意,我们就想部署它.但是在git flow分支模型中,我们需要首先合并到master和tag.问题是,在合并之后我们还需要运行另一个构建和测试周期吗?
合并和标记结尾似乎很奇怪,标记指向不同(技术上)提交,而不是发布版本.在我们进入主人之后重建似乎也很糟糕,因为我们会感到有必要测试该构建以确保它也可以.
我提出的选项是:
我是Git的新手,我开始学习命令行版本.我相信我的git flow安装不正确.我是从电脑上运行的.
当我运行以下命令时:
git flow feature start JamesTest
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
git:'flow'不是git命令.看'git --help'
你的意思是?
看起来没有从所有路径识别git flow命令?我该如何解决?
我们正在使用标准的git flow分支模型(develop,master ,release-,hotfix-等).
作为我们工作流程的一部分,我们希望通过jenkins设置"一键式"发布.
我在看jgitflow-maven-plugin.我可以设置这个插件来进行jenkins的一键式发布吗?如果是这样,配置选项有哪些?
特别是,我可以这样做吗?
Jenkins Job
Maven goals: release-start release-finish -Dsomething -Delse
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉它从最新的-SNAPSHOT版本自动构建,例如,如果版本是1.2.3-SNAPSHOT它将构建release-1.2.3.
否则,是否有maven插件根据git flow分支模型构建版本(即从中develop创建并创建一个名为的新版本分支release-x.y.z).
有没有办法在Windows上安装Git Flow?我试过这个教程,但我无法理解它.
我已经在我的电脑上安装了Git,我可以在目前的Git安装中使用GitFlow吗?
在工作中,我们现在使用 GitHub 以及 GitHub 流程。我对GitHub流程的理解是有master分支和feature分支。与 git flow 不同,它没有开发分支。
这对于我们已经完成的项目非常有效,并且简化了事情。
但是对于我们的产品来说,我们有一个开发和生产环境。对于生产环境,我们使用master分支,而对于开发环境,我们不知道该怎么做?
我能想到的唯一想法是:
目前,对于需要开发环境的项目,我们基本上使用 git flow(功能 -> 开发 -> 主控)。
您认为我的想法合理吗?如果不合理,您有何建议?
编辑:
只是为了澄清一下,我问的是使用GitHub Flow而不是git flow实现开发的最佳方法。
github branching-and-merging git-flow github-actions github-flow
我们刚刚开始使用git作为我们的生产代码,我们在工作流程中遇到了一个小问题.我们需要弄清楚如何处理在处理功能时出现的一般代码改进/技术债务修复.
我们采用的工作流程是使用"develop"作为主要的集成分支,并在"develop"之外的特征分支上开发所有功能.当一个功能完成后,开发人员会创建一个拉取请求,每个人都会检查它以在合并回到开发之前提供注释.这看起来效果很好.
我们遇到的问题是,在一个功能的例行开发过程中,开发人员可能最终想要修改/重构一些通用代码来改进系统或清理一些技术债务.此更改很有价值,但与开发中的功能没有直接关系.
根据我们的工作流程,它应该真正在不同的分支上完成,在开发之前通过它自己的pull请求和代码审查.如果我们让他们这样做,他们如何在他们等待完整的代码审查发生并将代码合并到开发中的同时将更改重新转换到他们的功能分支.
我们的想法是:
1)樱桃挑选从'refactorX'分支到我们的特征分支的变化.继续开发并让git(希望)弄清楚当我们合并回来开发它已经从重构分支的变化.
2)将'refactorX'分支合并到我们的功能分支中并继续开发.(注意:'refactorX'的分支开发可能是在开发历史的后期,所以我们认为这可能有问题)
3)我们还不知道其他一些更聪明的选择.:)
我们正在寻找的是关于如何处理这部分工作流程的最佳实践指南.在谈论它之后,我们知道它会频繁出现,我们希望在我们的工作流程中找到一种平稳有效的方法来处理它.
有什么建议?
在我们的 Github 工作流程中使用语义发布。
它们的设置如下:
[
{name: 'main', prerelease: false},
{name: 'staging', prerelease: true},
{name: 'development', prerelease: true}
]
Run Code Online (Sandbox Code Playgroud)
推送到development部署到环境development等。stagingstaging
现在,每次版本更新时,使用上面的包,都会使用语义发布/更改日志semantic-release创建更改日志。
现在我们应该如何处理不同分支中冲突的变更日志?
release分支上启用更改日志创建。(我不知道怎么做。插件没有这样的选项。)staging回到development.我想知道那里有人有类似的问题吗?