我在我的项目中使用 git,我一个人工作。
现在我已经准备好发布第一个版本,我遵循了这篇关于 Habré的文章的建议,这里描述了您需要创建一个发布分支以及如何将其发布,然后将其合并到 master 和进入开发者,然后删除它......
但是,如果我的开发分支已经一切就绪,为什么还需要创建一个发布分支...据我了解,我需要立即将其合并到master并打上标签并继续将项目保留在开发。
但是我本地只有一个开发分支,远程我有一个开发和一个master...
问题是,提交到本地开发分支,打上标签,将其合并到远程开发并将已经远程开发与远程master合并......
我只是不确定这个概念是否正确,其次我不确定是否有可能在远程分支上合并......
建议如何做对?
首先,一些理论来证实实际建议。希望你不会觉得无聊。
一般情况下发生了什么,开发和发布分支来自哪里
你提到的文章是关于一个叫做 git flow 的工作流模型的。总体而言,这是一个很好的模型。它旨在为大型项目中代码协作的混乱和无政府状态带来秩序,而这正是它有效的地方。如果你有一百个人在一个应用程序上工作,如果你被迫支持旧版本(修复错误和严重漏洞),如果每天进行数百次提交 - 接受它,你不会后悔。
对于那些
...根本不需要git flow。它制造的问题多于它解决的问题。
如何让它更容易
正确!您甚至不需要开发人员。
对于小型团队和单独开发,“轻量级”工作流模型更合适。最受欢迎的是 GitHub Flow,它在一些细节上与 GitLab Flow 和Simple Git workflow (Atlassian)的开发深度有所不同。
所有简单工作流模型的本质
master
。master
.master
. 然后必须移除树枝以免堆积垃圾。除了明显的简单之外,优点是代码不写在“台面上”,不在发布分支,而是尽快发布。从创意到生产的路径越短,对企业越有利。客户(用户)更快地获得新功能,你也能更快地从客户那里获得反馈并从这些功能中获得资金。
如何创建和命名分支
在问题跟踪器中,功能分支名称通常以问题编号开头。
你在某处保留待办事项清单吗?如果没有,请开始,原因如下:
制定小的、原子的任务,使分支机构的工作只需要 1-3 天,不会更多。这对单独工作很重要,对团队工作也很关键。
将本地分支推送到远程服务器也是可取的,这是一个很好的方法,当你把茶洒在笔记本电脑
rm -rf /
上、火灾、盗窃、陨石......时,不会丢失代码。如何合并分支
主要有两种方式:
可以在本地手动冻结分支。在命令行上它是这样的:
如果你使用 GitHub、GitLab、Bitbucket,你可以打开一个 pull/merge 请求,然后冻结它。在这种情况下,远程分支实际上被合并了,那么你将需要拉出合并的结果(
git pull
)。这种方法有助于在团队中进行代码检查和各种自动化测试,但如果你一个人工作,几乎不需要合并请求。特点:
--no-ff
以便始终创建合并提交。它可以帮助您查看历史记录,它可以帮助您找到进行提交的分支,并且可以准确指出该分支被冻结的位置,它可以通过git revert
. 喜欢合并提交,你会需要它们。master
没有准备好、没有完成等的东西中。分支master
是神圣的,它必须始终包含工作代码。master
到一个特性分支中。例外是将代码从一个主要版本中拉到一个长期存在的分支中,不同的分支用于不同的测试环境,以及其他在 solo 一个小项目时几乎不会发生的情况。发布
当您准备好发布时,只需进行所需的合并提交并在其上放置一个标签。使用带注释的标签。它们存储日期和作者,就像在提交中一样。因此,有关发布版本的确切决定者和时间的信息将被保留。
要将标签推送到远程服务器,请执行以下操作:
如果您突然拥有它们,则需要该参数
--follow-tags
以便仅推送带注释的标签而不推送轻量级(轻量级)。不要使用发布标签标记功能分支中的提交。我们冻结,测试结果,标记生成的合并提交。任何不在里面的东西
master
都不能成为释放。使用语义版本控制生成版本号。
尽可能经常发布
由于分支
master
总是需要包含工作代码,并且您始终只将已完成的功能合并到其中,因此每次合并实际上都是一个小版本。在这种情况下,请确保每次都重建应用程序。并不是说它需要立即发布给所有用户——过于频繁的应用程序更新会惹恼他们。但是尝试聚集一组 beta 测试人员(从你自己开始),你将在每个分支合并后为他们发布应用程序
master
。通过这种方式,您可以获得更快的反馈,并且操作系统周期越快,您的应用程序和技能发展就越快。这就是敏捷的本质。实践
鉴于以上情况,我提出这样一个行动计划。
可能是这样。
它可以同时是正确的,而不是特别适合你的项目。
这是被禁止的。您可以将本地分支与远程分支同步(获取/拉取)、合并,以及将远程分支与本地分支同步(推送)。其实连origin/master分支也是本地的。
IT 是一个非常有趣的领域,有很多正确答案。
特别是,对于一个只有一个开发人员的项目,您可以通过一个主分支和标签发布来完成。
git flow 和其他技术只有在您确切了解它们解决的问题时才能发挥作用。只要您的项目不包含此类问题,这些技术本身只会使生活复杂化。
1 创建 rc 分支
2 从你的开发中
合并 3 合并 rc 分支
这样做是为了在发生崩溃时,您可以安全地切换到以前的稳定分支,修复新的 rc 分支并再次发布。我不建议删除分支。实际上,您经常需要从其他分支获取更改。但是如果你有超过 N 个分支并且你已经对它们感到困惑,那么你只能在本地清理它(git branch -d <branch>)
分支的美妙之处不仅在于您可以获得项目的副本,还在于您的提交将在逻辑上合并:
那些。然后你会看到这 5 次提交是作为该功能实现的一部分进行的
不要听任何人的,因为 如果您是独立开发人员,那么您不必遵循所有这些 gitflow 规则。从一开始就学会工作!
通过使用该模型
git-flow
并使用 puregit
,是的,您将执行不必要的命令,这会减慢您的速度。但这不是这个模型的问题,而是你的问题,因为。你没有使用必要的实用程序 ;-) 例如,我使用gitflow-avh,配置.gitconf
并将别名添加到
.bashrc
而且我在控制台中使用所有这些“不必要的”分支比使用各种图形工具更快,而且我得到了一个美丽的故事作为奖励,因为 跟随
git-flow
。此外,所有功能都在手边git
(通常图形实用程序不会实现所有功能,但大多只实现基本功能)。可以在此处找到有关如何设置环境的更多信息。
我不了解你,但在一开始,当我结识时
git
,我对有分支的理解感到困惑master
,,。因此,我自己决定了。恕我直言:production
develop
production
develop
是的,在许多文章中,分支
master
意味着production
回答你的问题如何正确地做,我会提请你注意你的工作总是在本地发生的事实,你只与远程存储库同步。这就是为什么
好吧,那么我将支持这个详细的答案,但有几点除外:
在您测试之前,它不能称为稳定的。在测试期间,您可能会发现一个错误,您将在
master
. 因此,在上一次提交时,您的分支是不稳定的。为此,他们想出了一个分支
release
。您可以在其中进行任意数量的测试迭代,完成后您可以发布您的版本并将分支合并到master
/production
和develop
。让他们不要说什么,但无论如何,你应该有以下分支:
production
分支是保证任何提交都可以部署的分支。develop
branch - 这是您将功能合并到的分支hotfix
branch - 这个分支(以免从 prod 到 dev 中挑选)你在其中进行修复release
branch - 用于轻松创建发布因此,即使你是一个孤独的程序员,我也建议你遵循
git-flow
模型,以便能够正确地工作。在您描述的情况下,您可以采用两种方式:
这两种方法都会给出相同的结果,但是使用第二种方法,您需要做的工作更少。因此,在我看来,值得使用它。
那么为什么我们需要发布分支呢?问题是,任何方法论都是由一位作者或一组作者多年来发展起来的一组原则。Git flow 从团队开发发展而来,通常会有不同的人参与测试产品,也可能有一些人必须接受产品。
这是发布分支很适合的地方。例如,您的团队已经完成了发布所需的一组特定功能,比如 1.0 版。这一切都在 develop 分支,你没有信心代码是正确的(它没有被正确测试,而且主要经理也没有研究功能)。您可以发布 develop 的结果,但是那些不能将新功能推入 develop 的闲置开发人员呢?是否有明确界定的发布功能范围?
为了不让开发人员闲着,我们发布了一个发布分支,其中不能添加新功能,但必须纠正发现的任何错误和不准确之处。当发现的所有错误都已修复并考虑到评论时,发布分支将关闭,并与 master 合并并发布产品。
如您所见,您不需要发布分支作为独行者。因此,如果您不想做额外的工作,请跳过此步骤,并记住任何方法都是一组通用原则和规则,几乎总是需要根据特定案例的需要调整方法——如果您不这样做的话了解如何使用某些东西,那么你几乎肯定不需要它。
确保你有一个本地主分支。而且你需要合并,当然是在本地,然后上传到中央仓库。
至于是否需要创建发布分支,这可能完全取决于您如何开发项目以及如何组织流程。在有 Scrum、持续集成和 DevOps 的 21 世纪,只需单击一个按钮即可部署项目,无需在单独的分支中每次发布都使用文件进行修改。
在这里,而是向关于哈布雷的文章的作者提出问题。
另一件事,永久分支
release
。它可以用于实现相同的一键扩展。有几种不同的方法可以实现这种行为,其中之一是在分支上挂一个push钩子release
,根据这个钩子,新代码将被部署到生产服务器(又名production)。然后你只需在一个分支中编写和测试代码,我们称之为
dev
,当你认为代码工作正常时,将更改推送到release
,你的构建服务器构建安装包或将代码部署到 Web 服务器。同时,当然,你把标签,放在你方便的地方。线
dev
正好合适。GitFlow 是一个经过验证的经典和简单的概念。然后,如果你改变它,那么它就会在 GitLab Flow 上,在 pre-prod 分支中以额外稳定的形式应用复杂化。
develop 分支包含最新的开发代码的想法是显而易见的,并且更符合任何流程之前应用的开发方法,这使得从其他 CVS(Subversion,TFS)切换到它更容易,其中发布支持逻辑是相似的。
如果您开始实施Git Flow方法,我建议您使用俄语进行演示:https ://medium.com/ruopsdev/git-flow-presentation-b80643390888
有指向 IDE(Visual Studio Code、JetBrains IntelliJ IDEA、Atlassian SourceTree)的 git-flow 插件的链接,以及与 GitHub Flow 和 GitLab Flow 的比较。