我使用subversion作为scm开发了一个软件项目.到目前为止,开发总是发生在trunk
,所以当需要修复bug修复时会出现问题.现在,我们想重新考虑我们的分支策略,其要求是:我们希望能够同时处理多个未来版本.
这意味着:假设,我们正在处理的当前版本是1.0.下一个计划版本是2.0,之后的版本是3.0.现在我们已经发布了1.0版本
当然,在其他两个版本中也需要在1.0中应用的修补程序.此外,2.0的功能也必须在3.0.此外,可能会计划一个次要版本,例如1.1,其中还包括新功能,并且必须单独维护.
我提出了以下分支策略:
让我再详细说明一下:在给定的示例中,我们将从trunk分支1.0版.此外,我们将从版本1.0分支2.0版,从2.0版分支3.0版.当在1.0中进行更改时,它将合并到2.0,然后合并到3.0.
这是一种有效的方法吗?它会在技术上有效吗?是否存在组织缺陷?有最佳做法吗?(所有互联网都会提出:"在主干中开发,在发布分支中维护").放弃后备箱对我来说特别奇怪 - 这是错的吗?
我想就如何满足以下要求的专业开发设置提供一些意见.
我给了一些特定的技术,不要太抽象和b/c我也会对插件等的具体建议感兴趣.
在该设置中,我想到了几个问题.
1)因此每个开发人员都将在个人分支机构工作.
2)该分支在工作副本中签出.
现在......这个工作副本在PC上使用dev的IDE进行本地编辑,并在服务器上执行/测试.
在这种情况下,最好/通常的做法是什么?我的意思是 - 如何在不造成太多开销的情况下在服务器上获取编辑后的代码?
开发人员会在他的本地磁盘上有代码吗?或者让IDE通过隧道或特定协议在远程虚拟服务器上写入会更好吗?
3)每天,开发人员都会将他的工作投入到他的个人分支中,该分支位于中央存储库中.
是否有关于存储库应该位于何处的最佳实践?一个单独的服务器?
4)然后在开发人员完成任务后,他/她或团队负责人将新代码合并到相应的主分支或主干中.
最令人困惑的部分是我在2)和3)之间写的内容.因为到目前为止我只使用本地服务器.例如,具有运行代码的服务器的VM位于共享文件夹中,因此我将能够直接编辑它.当服务器现在实际上是远程时,我不确定如何有效地弥合差距.有效地意味着不必通过FTP手动上传.
欢迎外部资源或书籍推荐.
我的问题是/准目标是准标准/最佳实践.我认为这几乎是一个标准的开发方案,因此必须有一个"通常"的解决方案.
好的...所以让我们尝试一下图片:
V是一个或多个开发人员的虚拟测试服务器D. C和C'是两个代码版本.它们应尽可能保持一致.
我想到了两个解决方案:
1:编辑C,然后将其上传到C',然后执行C',然后提交C.
2:没有C存在.Just C',它是通过一些隧道技术编辑并执行和提交的.
我的胆量告诉我两种解决方案都是半最优的.那么什么是"专业"/最有效/最快/最方便/最无摩擦/最不容易出错/最佳实践/行业标准?
任何问题?
下面的 Git 分支模型似乎非常普遍。 http://nvie.com/posts/a-successful-git-branching-model/
在我们当前的项目中,我们没有开发分支,从 master 分支创建功能/错误修复分支并将它们合并回来并标记所有相关的里程碑(完成的功能/错误修复/发布)。
所以我想知道,拥有一个开发分支有什么好处?
我们有一个网络应用程序,我们有几个企业客户.我们最近决定将其作为SaaS应用程序提供,并遵循精益方法(与我们的公司产品并行).这意味着我们在旅途中进行了可能无法投入生产的实验.
在我们精益求精之前,我们对以下分支策略感到满意(我相信它非常标准):
现在我们除了上面的内容之外还有以下内容,并且效果不佳:
我们现在的情况是,我们需要快速而且经常在精益方法的指示下发布,当我们对任意事物得到可靠的反馈时,我们需要生成它并尽快释放它(从lean_release_branch开始).
问题是我们无法创建dev的功能分支(因为它很可能不稳定),我们无法创建lean_release_branch的功能分支,原因有两个:
有谁知道我们的设置更好的策略?
这个问题不是特定于iOS的,但为了清楚起见,我在此处包含了实际用例
我运行一个名为iOS的项目Foobar
,显然是在版本控制之下.在iOS项目环境中的项目文件中,有一个名为Foobar-Info.plist
XML文件,它存储有关项目的有趣信息,例如版本和我所构建的构建数量.
每次我构建项目时,我都会将存储在此文件中的构建计数递增,如下所示:
...
<key>BuildCount</key>
<string>2203</string>
<key>CFBundleShortVersionString</key>
<string>0.0.4</string>
<key>CFBundleVersion</key>
<string>0.0.4-release/0.0.4.2203</string>
...
Run Code Online (Sandbox Code Playgroud)
其中'0.0.4-release'是git-flow分支名称,2203是内部版本号.这是在CFBundleVersion
现场使用的,所以对我来说,构建来自哪里是非常明显的.
想象一下,在另一个分支中,自发布以来我已经取得了很多进展,并且相同的字段看起来像:
...
<key>BuildCount</key>
<string>2754</string>
<key>CFBundleShortVersionString</key>
<string>0.0.4</string>
<key>CFBundleVersion</key>
<string>0.0.4-feature/add-quux-and-baz.2754</string>
...
Run Code Online (Sandbox Code Playgroud)
假设我完成了发布,它已合并到主线develop
分支中.
问题
为了获得发布分支中的最新更改,我想将功能分支重新绑定到develop
.
当发生这种情况时,Foobar-Info.plist
将在rebase进程中的每次提交时引发冲突.这是因为每次提交都会增加构建号; 我必须通过选择手动指定具有最新版本的行来手动合并.请注意,3向差异的基本版本也会有所不同.
<string>2000</string> // Base
<string>2754</string> // Local ** always pick this one; it's the latest
<string>2203</string> // Remote
Run Code Online (Sandbox Code Playgroud)
我怎么能告诉git对于一个特定的文件,Foobar-Info.plist
我希望它通过最新的更改来解决我的冲突?
编辑:该文件必须保持在源代码管理下.我想保留BuildCount
它,因为它是我项目中努力的一个很好的指示,我想保留它!我知道这个数字只表示完成的MINIMUM数量,但这对我来说已经足够了.
我们正在采用一种新的分支策略来与Agile合作,并使我们能够逐个功能发布,我们有一个master
分支和一个QA
分支作为永久分支.每晚构建将基于QA
和发布将来自master
.开发人员将为每个故事创建一个功能分支.所有要素分支都要分支master
,然后合并到QA
测试中,然后将要素分支合并到master
后续版本中.这很好,直到以下场景:
feature/RodsFeature
,执行了一些工作并合并到QA
(但还没有master
)feature/JanesFeature
,执行了一些工作,现在正在尝试合并QA
QA
由Rod合并引入的变化引起的feature/RodsFeature
如果Jane要绕过QA并合并feature/JanesFeature
进去master
,那么就没有冲突,因为feature/RodsFeature
还没有master
.但是,Jane必须合并QA
,原因很明显.为了解决冲突,她可以将Rod的变化拉入并整合到她的特征分支中,解决冲突然后进行合并 - 一旦她将她的特征分支合并到master
其中,会产生不良后果,也会引入Rod的变化.还在等待QA测试.
所以 - 解决方法是直接解决QA
分支上的冲突,保留Jane的功能分支,以便以后合并master
.但是,这会破坏代码审查策略,因为合并应该由对等方批准 - 通过这样做,她已合并到QA
本地并推送到远程而没有任何拉取请求或同行评审.
在这种情况下,什么被视为"最佳做法"?
我们有四个可以部署产品的服务器环境,每个服务器都有一个目的:开发,内部测试,外部测试和生产.
我们试图尽可能简化合并/冲突解决方案,因此我们创建了两个不属于gitflow模型的额外分支.
正常的gitflow分支
但这两个分支也不标准,可能需要改变......
然后过程如下:
我们搞乱了整个gitflow模型吗?
我正在尝试配置 GitVersion 以使用发布流分支策略。
基本上,我有一个主线 Master 分支、Release、Feature 和 Fix 分支。功能和修复分支是从主分支创建的,并通过拉取请求合并回主分支。在冲刺结束时,我从 Master 创建一个发布分支,该分支将持续到下一个冲刺结束,届时将创建一个新的发布分支。Release 分支不会合并回 master 分支。它们甚至可以在创建新的发布分支后被删除。如果需要修补程序,它将在从创建并合并回 master 的 Fix 分支上开发,然后精心挑选到当前的 Release 分支中。我只在主要版本中使用 git 标签。
回到 GitVersion,我想对其进行配置,以便在创建新的发布分支时次要版本号会增加,并且当发布分支上有新的提交(从修复分支中挑选)时补丁号会增加。
有人已经这样做并且可以帮助我吗?
我有一个Team Foundation Server 2013代码结构,如下所示......
$/TeamProject/Application/AllTheCodeFiles
Run Code Online (Sandbox Code Playgroud)
......但我想重构......
$/TeamProject/Application/Trunk/AllTheCodeFiles
Run Code Online (Sandbox Code Playgroud)
这将允许我通过在与"Trunk"相同的级别创建"Release"分支来实现分支和合并策略.
如果我尝试分支或将Application目录移动到Trunk,我收到错误消息:
目标项$/TeamProject/Application/Trunk不能位于源项$/TeamProject/Application下.
所以,这是我遵循的过程,感觉不对,我猜测有更有效的方法.
$/TeamProject/Application
为$/TeamProject/Application-trunk
$/TeamProject/Application
目录$/TeamProject/Application-trunk
到$/TeamProject/Application/Trunk
这样做之后,历史与之$/TeamProject/Application
无关$/TeamProject/Application/Trunk
.我的问题是,知道更多的人会以什么方式做到这一点?
我在git树中遇到了意外情况。我已经从master创建了一个分支,但是当我在新分支上执行提交时,好像这些提交与master在同一代码行中进行...
如您所见,在最左侧是master(深蓝色)的代码行,在顶部,我们可以看到Sprint_15,它是master的分支,似乎在同一行上有提交...不知道为什么会这样。由于功能已合并到Sprint_15中而不是母版中,因此我希望代码会换行,
我的想法是,通过将Sprint_14和Sprint_15合并在一起,这在历史上做得很时髦,但是我不确定为什么。
我对git还是很陌生,因此它的某些基础仍然让我感到困惑。