Questions tagged «branching»

修订控制中的分支是复制受修订控制的对象,以便可以沿两个分支并行进行修改。

3
分支机构中断持续集成吗?
我认为这篇文章《成功的Git分支模型》在经验丰富的DVCS用户中是众所周知的。 我hg主要使用它,但是我认为这种讨论对任何DVCS都适用。 我们当前的工作流程是每个开发人员克隆主存储库。我们在自己的本地仓库上编写代码,运行测试,如果一切顺利,则推送给主服务器。 因此,我们希望设置诸如Jenkins的CI服务器,并通过将来的预配系统(厨师,木偶,ansible等)改善我们的工作流程。 实部 好了,以上介绍的模型很好用,但分支机构可以破坏CI。Feature分支应该与原点同步(根据文章,它将是development分支),以使CI和合并更加顺利,对吗? 说爱丽丝和鲍勃正在研究两个功能。但是爱丽丝第二天就完成了。鲍勃的功能需要一个星期。到Bob完成时,他的更改已过期(也许Alice重构/重命名了某些类)。 一种解决方案是,每天早晨开发人员必须master/origin检查是否有任何更改。如果Alice提交了,Bob应该拉入并合并到他的工作区中,以便他的功能分支是最新的。 这是个好方法吗? 这些分支是否应该存在于主存储库中(不是本地克隆?),这意味着每个开发人员都应向GitHub / Bitbucket上的主存储库授予特权,以便他们可以创建新分支吗?还是在本地完成? 最后,如果分支未与同步,则本文介绍的模型应打破CI origin/master。既然我们要进行夜间构建,开发人员是否应该在离开工作之前进行合并和合并,并且CI也要在每个功能分支上运行?

6
当其他人迅速提交代码库时,我该如何重构它?
我在一个私有项目中,该项目最终将成为开源项目。我们有一些团队成员,他们具有足够的技术来构建应用程序,但没有专门的开发人员来编写干净/美丽的代码,最重要的是长期可维护的代码。 我已经着手重构代码库,但这有点笨拙,因为与我不经常接触的另一个国家/地区的团队中的某人可能会更新此完全独立的内容。 我知道一种解决方案是快速沟通或采用更好的PM实践,但我们还不算大。我只想清理代码并将其很好地合并到他已更新的内容中。使用分支机构是否合适?尽力而为?还有吗

3
吉特:树枝还是叉子?
我有一个游戏项目,它将有两个版本: 游戏的一个简单版本,核心。 游戏的高级版本。 我的公共存储库中有第一个版本,只有我会进行处理。至于第二版,我的两个朋友将与我合作。关键部分是我希望这两个版本保留在我的存储库中。 我以为可以为此使用分支,但是考虑到这个问题及其答案,就版本控制而言,这不是一个好习惯。据我所知,不可能分叉自己的存储库。 我在这里有什么选择?如何将两个版本都保存在存储库中?

4
开发人员因等待代码使用GitFlow从另一个分支合并而受阻
我们的团队刚刚从FogBugz&Kiln / Mercurial转到了Jira&Stash / Git。我们使用Git Flow模型进行分支,从功能分支添加子任务分支(与Jira功能的Jira子任务有关)。当我们创建一个合并到父分支的拉取请求时,我们使用Stash来分配一个审阅者(通常是开发,但是对于子任务来说是返回到功能分支)。 我们发现的问题是,即使对功能用例进行了最佳的规划和分解,当多个开发人员一起使用同一个功能时,例如在前端和后端,如果他们正在使用相互依赖的代码,在一个单独的分支中,一个开发人员最终阻止了另一个。 随着我们的发展,我们尝试在彼此的分支机构之间拉动。我们还尝试了创建本地集成分支,每个开发人员可以从多个分支中提取它们以在开发时测试集成。最后,这似乎到目前为止对我们来说是最好的,尽管开销更大,我们尝试立即从功能分支创建一个集成分支。当子任务分支(不在功能分支中)准备好进行拉取请求和代码检查时,我们还将手动将这些更改集合并到此功能集成分支中。然后,所有感兴趣的开发人员都可以从该集成分支拉到其他依赖的子任务分支。这样可以防止任何人等待他们依赖的任何分支通过代码检查。 我知道这不一定是Git问题-它与在多个分支中处理相互依赖的代码有关,并与我们自己的工作流程和文化相结合。如果我们没有用于开发的严格代码审查策略(真正的集成分支),则开发人员1可以合并以进行开发,以供开发人员2退出。另一个复杂的问题是,在将功能交付给QA之前,我们还需要在代码审查过程中进行一些初步测试,这意味着即使前端开发人员1正从后端开发人员2的分支直接拉出如果后端开发人员2完成并且他/她的拉取请求在代码审查中待了一周,那么前端开发人员2从技术上讲就无法创建他的拉取请求/代码审查,因为他/她的代码审查者无法测试,因为后端开发人员2' 最重要的是,在这种情况下,我们发现自己采用的是串行方式而不是并行方式,这取决于我们走的路线,并希望找到一种避免这种情况的过程。 我要提到的最后一件事是,我们通过在尚未经过代码审查和定稿的分支之间共享代码来实现,但实际上我们是在使用其他Beta代码。在某种程度上,我认为我们无法避免,并且愿意在一定程度上接受这一点。

3
Git:修复影响两个分支的错误
我将我的Git回购基于一个成功的Git分支模型,并且想知道如果遇到这种情况会发生什么: 假设我在两个要素分支A和B上进行开发,并且B需要来自A的代码。X节点在要素A中引入了一个错误,该错误会影响分支B,但是在合并了要素A和B的节点Y上未检测到此错误,在再次分支并进行下一次迭代之前进行了测试。 结果,功能B的工作人员在节点Z上发现了错误。在此阶段,已确定需要进行错误修复。此修复程序应同时应用于两个功能,因为使用功能A的人员还需要修复该错误,因为该错误是其功能的一部分。 是否应该从最新的功能部件A节点(从节点Y分支的一个部件)创建一个错误修正分支,然后与功能部件A合并?在将这两个功能合并到一起之后,再进行开发和测试,然后再进行分支? 问题是它需要两个分支合并才能解决此问题。由于功能部件B不接触功能部件A中的代码,是否有办法通过实施修订并仍允许功能部件B分支保持未合并但功能部件A具有固定代码的方式来更改节点Y上的历史记录? 密切相关:Git错误分支约定
16 git  bug  branching 

3
长期运行未发布代码的Git分支策略
在我们的团队中,除了个别的工作单元(故事),我们还有工作时间更长的主题(史诗)。多个故事成为史诗。 传统上,我们为每个故事提供功能分支,并在它们通过质量检查后直接合并为母版。但是,我们希望开始阻止在Epic中发布已完成的故事,直到Epic被视为“功能已完成”为止。我们只会在整个Epic关闭时才将这些功能发布到生产环境中。此外,我们有一个每晚生成的服务器-我们希望所有封闭的Stories(包括那些不完整的Epics的故事)都将自动部署到该每晚的服务器。 关于如何管理我们的仓库来实现这一目标,有什么建议吗?我考虑过引入“史诗般的分支”,在这里我们将封闭的故事合并到相关的史诗分支中,而不是直接掌握。但我担心的是: 我担心如果史诗分支长时间保持开放可能会发生合并冲突 每晚构建需要将所有史诗分支合并为一个“每晚构建”分支。同样,可能会发生合并冲突,这将自动完成

5
在.NET应用程序之间共享代码的最有效方法是什么?
在我们的工作中,我们有几个不同的.net应用程序,它们共享许多基本功能。我们已经使用干净的n层体系结构构建了这些应用程序,但是到了那一刻,我们意识到我们已经在不同的时间重新实现了相同的功能。显然这违反了DRY,我们希望对此进行更正。我们已经使用Nuget成功实现了通用粘合代码(连接IoC,日志记录,设置),但是我们也希望在所有应用程序之间共享数据和业务层。想法是,UI仅处理其实际需要的业务层部分。 起初这似乎是一个直截了当的问题,但是持续的开发可能会带来一些陷阱,我们不确定如何进行。假设我们建立了一个业务层来全部统治。为简便起见,我将其称为“基金会”。我们将我们的应用程序移植为使用Foundation,并且一切都很好。该基金会通过nuget分发给轻量级UI层,我们看起来很好。但是随后我们开始向应用程序中添加功能,并且遇到了麻烦。 假设我们正在开发Project A,并且添加了一项需要更改Foundation的新功能。我们对基础(Foundation-A)进行更改,并将它们作为不稳定的程序包推送到nuget提要。项目A获得了最新的nuget包,一切都很好。同时,另一位开发人员正在开发ProjectB。他从源代码控制中获得了最新的Foundation,但从一个稳定的分支中获取了最新的Foundation,因此它没有Project A的更改。他进行了更改并创建了Foundation-B。一切都很好。但是随后我们发现,Foundation-A和Foundation-B实施功能实际上可以共享代码,因此我们将它们组合在一起。同时,Foundation-C本身也有自己的变化。最终,Foundation-B可以投入生产,因此我们将其推出。但是然后我们需要更新生产A,B, 这似乎可行,但是我们担心使用不同的数据库模式,并使Foundation信息库的各个分支以及Project A,B和C信息库之间的所有内容保持同步。似乎可能需要大量的手动工作,这可能会出现错误。我希望这尽可能自动化。 这是我们使用的堆栈:C#,具有持续集成功能的TFS,Nuget。我们的应用程序是所有类型的ASP.NET应用程序。如果这会使事情变得更容易,我们愿意研究不同的SCM。 我正在寻找使Nuget对我们不同的源代码分支保持理智的方法。我们不想意外地将开发代码推入生产环境,因为我们引用了错误的Nuget包。

2
大项目布局:在多个子项目上添加新功能
我想知道如何使用版本控制管理系统来管理具有许多组件的大型项目。 在我当前的项目中,有四个主要部分。 网页 服务器 管理控制台 平台。 Web和服务器部分使用了我编写的2个库。总共有5个git存储库和1个mercurial存储库。项目构建脚本位于平台存储库中。它使整个构建过程自动化。 问题是当我添加一个会影响多个组件的新功能时,我必须为每个受影响的存储库创建分支。实施功能。合并回去。我的直觉是“出事了”。 那么我应该创建一个单一的仓库,并将所有组件放置在那里吗?我认为在这种情况下分支会更容易。或者我只是做我现在正在做的事情。在那种情况下,我该如何解决在每个存储库上创建分支的问题?

2
一个产品的不错的git分支模型,该模型应该与另一个第三方产品的版本(以及一个建议的优缺点)一起提供
注意: 我的问题集中在我的特定问题(涉及Liferay)上,但是我希望它对需要在git上维护同一项目的各种版本的人有用。 我在一家为Liferay Portal编写很多插件的公司工作。这些插件(portlet,主题等)通常是可重用的,当然,应该为门户的新版本进行更新。 但是,通常必须将Portlet迁移到Liferay的新版本并维护其先前版本。同样,我们经常必须为某些客户端创建非常特定的自定义,将其添加到“主版本”中没有意义。 这些要求使我们的工作复杂化,但是幸运的是,我们可以进行一些简化。例如,一次只能由一位程序员频繁更新插件。同时在插件中添加两个或多个功能的情况很少见。 现在,我们正在迁移到Gitorious。我们正在尝试为这种情况设想一个分支模型。 我的模特 我建议的是: 每个插件在项目内部的Gitorious中都有自己的存储库。例如,用于显示小猫的portlet将kittens-portlet在liferay-portlets项目内部具有一个存储库。 创建新插件时,请在根据Liferay版本命名的分支(例如lf5.2)上创建它。 每次对插件进行更新时,都会批准该更新并将其部署到生产环境中,并用一个版本(例如lf5.2v1,lf5.2v2等)标记该插件* 每次将插件移植到Liferay的新版本时,我们都会分支最新版本(例如,创建branch lf6.0)。 一旦投入生产,新分支的负责人将收到诸如的标签lf6.0v1。 每次我们必须以客户端特定的方式自定义插件时,都会使用客户端名称创建一个分支(例如,我们将为lf5.2clientcorp客户端“ ClientCorp Inc.” 创建一个分支)。 这是一个不寻常的模型:它没有master分支并且没有很多分支。这就是我假设具有这种模型的存储库的样子: 一位朋友发现此系统相当复杂且容易出错。他提出了出色且受欢迎的Vincent Driessen模型,我发现该模型仍然难以管理和严格遵守纪律。当然,它很棒(并经过测试!),但对于我们的情况似乎太复杂了。 我朋友的模特 然后,他提出了另一种模型:我们将为Liferay版本中的每个插件提供一个存储库(因此,我们将开始创建kittens-lf5.2-portlet,然后再创建kittens-lf6.0-portlet),每个插件都有一个master分支和一个develop分支。该master会随时进行部署。(或者,master和Steve Loshstable所建议的相反)。 这很简单,但是我不喜欢这个系统: 它可能会在一个项目中导致大量的存储库,从而使Gitorious难以浏览。 项目目录的名称是相关的。如果有人将存储库克隆到kittens-lf6.0-portlet目录并使用ant生成WAR(通常),则WAR名称也将是kittens-lf6.0-portlet。kittens-portlet在升级的门户网站中,此portlet的旧版本(例如命名)将被视为不同的portlet(并且可能会丢失)。稍加注意可以避免它,但我宁愿避免它。 同一插件的不同版本将分开维护。我伤了我的心:( kittens-lf6.0-portlet 我认为,这是存储库的丑陋名称。 我怀疑最后两个要点-也是两个更主观的要点-是我不愿意的主要原因。尽管如此,所有四个反对意见仍然成立。 太太,我自己的建议对我自己来说似乎很奇怪,我想知道上面是否有隐藏的错误。OT3rdH git非常强大和灵活,我认为探索它的可能性不应该感到羞耻。 所以,我问: 最好的模型是什么?我的建议?我朋友的模特?现在是传统的Vincent Driessen系统? 您还建议其他什么分支模型? 如果您认为我的模型不好,为什么会这样呢?我很想了解缺点和盲点。 *实际上,我更喜欢用这样的版本标记提交,例如,v1但显然git中的标记不在分支范围内-也就是说,我不能在其中添加1 v1标记,lf5.2而在其中另一个标记lf6.0-因此我必须命名科。它是正确的BTW吗?

1
Git从功能分支分支到子功能
我们目前处于以下情况,其中功能分支已分支为子功能分支(例如,为同一功能处理后端和前端事物): o | o development |\ | o feature-a | | | o | |\ | | o feature-a-sub | | | | | | | \ | o merged feature-a into feature-a-sub | / o feature-a-sub merged into development | | | o feature-a with future work on it …
12 git  branching 

1
合并分支的有用git commit消息
作为此问题的后续措施: 如果我自己一个团队工作,那么在合并分支时,可以通过将所有提交压缩到单个差异中然后合并该差异来维护有用的提交消息。这样,我可以轻松地看到分支中引入了哪些更改,并且我只有一个摘要来描述浏览主分支时该分支中完成的功能/更改/所做的一切。 我现在的问题是,与团队合作时该如何完成?在这种情况下,分支将被推送到远程存储库,这意味着我无法将分支中的所有提交压缩为单个commit。如果分支是公共分支,则master分支中仍可以有一个有用的合并提交吗?(“有用”是指主行中的提交告诉我(1)分支中所做的操作的有用摘要,以及(2)分支的差异。)
12 git  branching 

6
我们如何每隔一周在生产版本中仅包含准备发布的功能?
我是一个相当大的敏捷团队的软件开发人员(我们有8个开发人员积极地对单个代码存储库进行更改)。每隔两周,我们会将软件的新版本投入生产。这是我们当前的工作流程: 在开始新任务时,开发人员在主开发分支(我们使用git)的基础上创建一个“功能分支”,并在此新分支上工作 开发人员完成任务后,将其功能分支合并回开发分支 开发人员将开发分支合并到质量检查分支。 质量检查分支会触发构建。此构建的输出已部署到我们的QA环境中,以允许测试人员开始其测试。 对于我们的测试人员来说,发现这些已合并到QA分支中的新功能的问题很常见。这意味着在任何给定的时间,QA环境都可能包含一些新功能-一些经过测试且没有错误,还有一些已损坏。这使得发布变得困难,因为很少有QA版本处于生产就绪状态。 为了减轻这种情况,我们一直试图启动“质量检查冻结”,这意味着开发人员在发布前几天不会将我们的开发分支合并到质量检查分支中。质量检查环境的错误修复程序直接在质量检查分支中进行,并合并到开发分支中。从理论上讲,这使新的,已损坏的功能无法进入质量检查,同时仍使我们能够解决质量检查中已有的问题。 虽然“质量检查冻结”的概念已部分成功,但很难进行协调,人们常常对是否允许其合并到质量检查中感到困惑。设置“ QA冻结”截止日期也很困难-每个人都喜欢在冻结和发布之间留出一些喘息的想法,但是实际上,他们宁愿在下一个发行版中发挥自己的功能,也不愿遵守截止日期。 是否有更好的方法来确保我们每两周发布一次新版本?

4
在功能分支上工作时应提高代码质量吗
我真的很喜欢这篇文章,它使代码/营地处于比您发现的状态更好的状态 -在现实世界中,保持代码整洁似乎是一种实用的方法。 我也非常喜欢要素分支,它是一种独立开发要素的方法,这样,如果您不喜欢它,就可以轻松地将其合并等。 但是,如果我在功能分支上工作,并且发现一些难看的代码,是否应该解决它? 感觉有很多缺点需要解决: 当我将分支合并回去时,差异将变得混乱,变量重命名或函数提取会变得混乱 如果放弃了该功能,则必须选择清除提交(根据其附近的代码如何进行混乱的合并而改变可能有效或无效),重新执行或放弃它。 另一方面,如果我在文件中时不执行此操作,那么很明显,我会在合并分支的几天之内忘记执行此操作。 我被警告说这是基于观点的(我认为标题仅包含事实should),但是我觉得有一个答案(肯定有人使用这两种方法,所以他们必须有答案)。此外,有关的问题development methodologies都是话题,我认为它们需要一定的意见。

6
在git中,如何对十二个库进行版本控制
我们正在做项目,但是我们在项目之间重用了很多代码,并且有很多包含我们共同代码的库。在实施新项目时,我们发现了更多方法来分解通用代码并将其放入库中。这些库相互依赖,而项目则取决于这些库。每个项目以及该项目中使用的所有库都需要使用它们所引用的所有库的相同版本。如果我们发布某个软件,则我们将不得不修复错误,并可能添加许多年甚至数十年的新功能。我们有大约十二个库,更改通常跨越两个以上,并且几个团队并行处理多个项目,并同时对所有这些库进行更改。 我们最近已切换到git并为每个库和每个项目设置存储库。我们使用存储作为公共存储库,在功能分支上进行新工作,然后发出拉取请求并仅在审阅后合并它们。 我们必须在项目中处理的许多问题都要求我们在多个库和项目的特定代码之间进行更改。这些通常包括库接口的更改,其中一些不兼容。(如果您认为这听起来有些可疑:我们与硬件进行交互,并将特定的硬件隐藏在通用接口之后。几乎每次我们集成其他供应商的硬件时,都会遇到我们当前的接口无法预期的情况,因此必须对其进行完善。)例如,假设一个项目P1使用的库L1,L2和L3。L1还采用了L2和L3,并L2使用L3为好。依赖关系图如下所示: <-------L1<--+ P1 <----+ ^ | <-+ | | | | +--L2 | | ^ | | | | +-----L3---+ 现在,想象一下此项目的功能需要更改,P1并L3更改的界面L3。现在添加项目P2并添加P3到组合中,它们也引用这些库。我们不能将它们全部切换到新界面,运行所有测试并部署新软件。那有什么选择呢? 在中实现新接口 L3 提出请求L3并等待审查 合并变更 创建一个新版本 L3 P1通过参考L3的新版本开始使用该功能,然后在其P1功能分支上实现该功能 提出拉取请求,对此进行审核并合并 (我只注意到我忘了切换L1,并L2到新版本,而我甚至不知道在哪里要坚持这一点,因为这将需要同时做同P1...) 这是一个繁琐,容易出错的过程,并且实施此功能的过程非常漫长,它需要进行独立审核(这使得审核变得更加困难),根本无法扩展,并且有可能使我们停业在过程中陷入困境,我们永远都做不完。 但是,如何使用分支和标记来创建一个流程,使我们能够在新项目中实现新功能而又没有太多开销?

6
为发行版选择正确的分支策略
从新项目的新开发团队开始,我们必须为源存储库(例如Microsoft Team Foundation Server 2010)定义分支策略。关于是否要...我们进行了激烈的讨论。 一。有一个Release分支,我们可以从中进行生产构建,然后在实际发布某些内容时添加Label 要么 乙。每个投入生产的新版本都有一个新的Release分支(例如,版本1、2、3等) 选项A看起来很简单,但是我们不确定从长远来看是否会导致问题。选项B似乎只是创建了许多长期存在的分支,并且随着时间的推移不断积累。 有人有任何经验可以帮助我们做出决定吗?具体来说,我想听听任何一种选择的痛点所在。随时提供有关TFS和/或发布管理含义的特定经验。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.