首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >您打算如何合并多个分支?

您打算如何合并多个分支?
EN

Stack Overflow用户
提问于 2010-08-19 01:08:02
回答 4查看 2.3K关注 0票数 4

我最近加入了一个拥有代码库的团队,这个团队还没有受到版本控制。在从事不同项目的组织中,这些代码已经被组织中的不同人员分叉了好几次。现在,我们将开始使用版本控制,我们希望合并来自不同项目的宝贵贡献。这些项目共享一个共同的原始版本,因此我为每个项目创建了一个分支,并计划开始合并。现在我想知道合并时使用什么策略。

如何选择要开始合并的分支?最不可怕的变化?最恐怖的那个?在将其中一个项目合并到主干后,是否会将所有分支与主干同步?在与许多分歧很大的分支一起工作时,是否有最佳做法可遵循?

还是我应该停止担心,开始一个接一个地合并他们?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-05 03:06:11

如果希望顺利合并,则应确保将每个合并的基本版本包含到版本控制系统中(如果有这些版本的话)。只要确定人们最常使用的分支之一是主干,那么每次有人从树干上分支时,您都需要在主干上记录一个版本,如果您有这些分支的话。没有那些基本版本,合并就会变得一团糟。

如果没有版本控制,甚至没有人在合并时执行代码的tarball,那么即使是基本版本,您也不能进行重构,因此需要非常小心。在合并任何东西之前,将代码放入源代码控制中。试着以尽可能近似的方式重建从哪里分支出来的分支。

现在,如果您的源代码管理系统记录了分支之间的合并链接,并且很好地跟踪了基本版本和合并(例如ClearCase ),那么您希望从较小的合并开始,这可以由单个开发人员完成,以便首先减少并行工作。然后与所有参与的开发人员进行大规模合并。

另一方面,如果您没有很好的跟踪,那么在随后的合并中,已经完成的合并的更改将再次弹出,您可能需要重新决定冲突。这是相当痛苦的,所以我建议大合并与完整的团队,这样每个人都可以看到什么已经决定,然后他们可以保留正确的代码,在他们的小合并。

主要的一点是,如果没有正确的合并跟踪,您对了解代码的人的需求就会增加,因为他需要识别进入文件的正确(当前)代码块。

票数 1
EN

Stack Overflow用户

发布于 2010-08-19 06:52:42

我猜想每个子项目都有大量的副本/压缩文件,但是不同的“分支”存在于不同的文件夹/计算机中,或者通过其他方式进行区分。

然后有两个选项:要么重建整个项目历史,要么使用当前版本作为不同的合并基。

历史重构

只在以后需要完整的历史记录时才走这条路,因为这是一项很大的工作。

第一个问题是识别相互复制的版本。您可以使用文件时间戳来获得粗略的历史估计(在每个副本中查找最新的文件)。在您有了一个时间线之后,您可以将它们导入到一个VCS中,并查看是否出现了反向补丁(某些内容包含在rev4中,排除在rev5中,再次包含在rev6中),这表明顺序不正确。另外,看看这些更改是否最有意义(更改创建了更多的特性和较小的bug)。在您得到正确的顺序之前,请准备多次执行此步骤。因此,不要为此使用最终的VCS,因为您可能希望抛出中间步骤。我还建议将存储库放在本地机器上,因为您需要在多个版本之间执行许多不同的操作,并且不需要任何网络延迟(我使用mercurial和tortoiseHg来执行此类任务)。

在此过程结束时,您应该按时间顺序拥有所有副本,并且知道(至少大致上)不同分支的基础。

所以当你有这样的事情时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Base --> A --> A'
         \
          \---> B --> B'
                \
                 \--> C

您可以从创建带有Base的主干开始,在那里添加更改A和A‘。然后创建以A为父级的分支B,并添加B‘。然后创建以B为父级的分支C。你的每一份拷贝都是如此。

有了重建历史之后,就可以开始大合并了。但是,除非你能在重建的过程中重建内部合并,否则当你把一切都整合在一起的时候,你就不会有任何优势。

只有释放

将基本版本导入到VCS中。然后为其他版本创建一个分支,并将彼此的发布放到相应的分支中。然后你可以合并所有的东西。

票数 1
EN

Stack Overflow用户

发布于 2010-08-27 01:17:12

在开始合并之前,我应该考虑使用什么样的版本控制工具(您没有提到正在使用的是什么)。绝对避免VSS,CVS和Perforce。Subversion和Perforce是可以的,但是如果您创建了许多分支,那么您会发现有一个管理开销来保持所有的工作。GIT、Accurev和PureCM是我用于合并的最好工具。如果您喜欢分布式模型,可以使用GIT,否则我将使用非常便宜的PureCM。

您应该根据通用代码为主干创建分支。由此,您可以从树干逐个创建其他分支。为项目分支创建一个工作区,将工作区文件与项目文件一起关闭并签入。然后,您可以将此更改合并回主干并解决任何冲突。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3520233

复制
相关文章
应用程序内购买教程:入门
更新说明:Pietro Rea为Xcode 10,Swift 4.2和iOS 11/12更新了本教程。Ray Wenderlich写了原文。
iOSDevLog
2018/08/22
5.5K0
应用程序内购买教程:入门
分享我用Qt开发的应用程序【二】在Qt应用程序中使用字体图标fontawesome
为了使用简单,需要先写一个单件类,头文件的代码如下: 其中静态方法Instance保证IconHelper的实例全局唯一 (注意构造函数已经私有化了) #ifndefICONHELPER_H #defineICONHELPER_H #include<QObject> #include<QMutex> #include<QMutexLocker> #include<QtGui> #include<QtWidgets> #include<qfont.h> classIconHelper:publicQObje
liulun
2018/01/12
1.8K0
分享我用Qt开发的应用程序【二】在Qt应用程序中使用字体图标fontawesome
Python—蜕变的必经之路(从脚本到应用程序)
这个周总算度过去了,这一个周的时间都在做ATM的一个作业,这个题目是写一个应用程序,而不是写一个简单的脚本代码。对于入门选手来讲,这个还是挺难的,之前一直就是一个文档搞定所有功能,而应用程序是要组织框架的,要有入口程序、有配置文件、核心文件文件、数据库、日志、使用说明等等。反正第一眼我是极度懵逼的,不过好在已经顺利渡劫,不然我也不会用3个英文词语来开头本篇文章了
Ed_Frey
2019/07/04
1.3K0
Python—蜕变的必经之路(从脚本到应用程序)
如何创建应用程序清单文件 App.Manifest,如何创建不带清单的应用程序
如果你的程序对 Windows 运行权限有要求,那么需要设置应用程序清单。本文介绍如何添加应用程序清单,并解释其中各项权限设置的实际效果。
walterlv
2023/10/22
1.2K0
如何创建应用程序清单文件 App.Manifest,如何创建不带清单的应用程序
FastAPI(40)- 大型应用程序的项目拆分
背景 假设要搭建一个测试平台,那么整个项目的 API 数量肯定很多个,他们不可能放在同一个文件中 FastAPI 提供了一个方便的工具来构建应用程序,同时保持所有的灵活性 项目架构 假设结构如下 . ├── app │ ├── __init__.py │ ├── main.py │ ├── dependencies.py │ └── routers │ │ ├── __init__.py │ │ ├── items.py │ │ └── users.py │ └─
小菠萝测试笔记
2021/10/09
1.6K0
FastAPI(40)- 大型应用程序的项目拆分
《DRM 专栏》| 从应用程序谈起
声音越大的人不见得越有真本事,当然混沌社会使得声音大的人更易有存在感,但把时间拉长,对的错不了,错的也对不了。 认识龙哥已有 2 年之久,他是很 nice 的一位技术大佬,很荣幸获其授权,在【人人都是极客】发表 DRM 的系列好文。虽然是 4 年前的文章,但放在现在仍然吊打各种技术文。 DRM DRM是Linux目前主流的图形显示框架,相比FB架构,DRM更能适应当前日益更新的显示硬件。比如FB原生不支持多层合成,不支持VSYNC,不支持DMA-BUF,不支持异步更新,不支持fence机制等等,而这些功能D
刘盼
2022/06/10
4.4K1
《DRM 专栏》| 从应用程序谈起
Flutter 应用程序中显示应用程序通知
要使用 Overlay 功能,我们必须将 Material 应用程序包装在OverlaySupport小部件中。
徐建国
2021/11/30
1.8K0
Flutter 应用程序中显示应用程序通知
python启动应用程序和终止应用程序
每天上班,工作需要,电脑上需要每天开机启动一些软件,下班时候,需要关掉一些软件。一个一个打开和关闭貌似是很繁琐的,于是乎,这个脚本产生了。
py3study
2020/01/07
2.4K0
从任务到线程:Java结构化并发应用程序
并发程序设计的第一步就是要划分任务的边界,理想情况下就是所有的任务都独立的:每个任务都是不依赖于其他任务的状态,结果和边界。因为独立的任务是最有利于并发设计的。
lyb-geek
2018/12/07
5080
应用程序的通信成本
应用程序的通信成本 什么是通信 一个程序中两个以上功能相互传递信号或数据叫做通信。 什么是成本 这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间是指传递过程耗费容量大小。 都有哪些通信方式 全局变量 线程间通信 共享内存 共享文件 管道 Socket 硬件(串口,USB) 等等 全局变量 全局变量是成本最低通信方法,通过设置全局变量,在程序运行时过程中均可操作该变量,用户信号传递,数据传输。 线程间通信 线程间通信也是采用全局变量方式,通常线程库会提供一套完善的API供用户使用,它可以实现共
netkiller old
2018/03/05
9830
应用程序的通信成本
应用程序的通信成本 什么是通信 一个程序中两个以上功能相互传递信号或数据叫做通信。 什么是成本 这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间是指传递过程耗费容量大小。 都有哪些通信方式 全局变量 线程间通信 共享内存 共享文件 管道 Socket 硬件(串口,USB) 等等 全局变量 全局变量是成本最低通信方法,通过设置全局变量,在程序运行时过程中均可操作该变量,用户信号传递,数据传输。 线程间通信 线程间通信也是采用全局变量方式,通常线程库会提供一套完善的API供用户使用,它可以实现共
netkiller old
2018/03/05
8080
在Windows Mobile上隐藏你的应用程序
    有时候,我们需要在Windows Mobile上做一些invisible的应用程序,使得用户无法察觉。这几天找了一些资料,请教了Jake等一些朋友,下面就做一个简单的总结。 1. 如何逃脱“任
ShiJiong
2018/01/10
1.2K0
在Windows Mobile上隐藏你的应用程序
在Linode上部署React应用程序
React是一个用于构建用户界面的流行JavaScript库。虽然React经常被用作更复杂应用程序的前端,但它也足够强大,可以单独用于完整的客户端应用程序。
selinayu
2018/09/21
2.7K0
开始在Kubernetes运行Python应用程序
你知道你想要在Kubernetes中运行应用程序,但不知道从哪里开始。或者你刚刚开始,但不知道自己不知道什么。在本博客中,你将了解如何封装应用程序,并使其在Kubernetes运行。
CNCF
2019/12/04
3.5K0
开始在Kubernetes运行Python应用程序
在 Microsoft 云上构建应用程序
Microsoft 云包括了Azure、Power Platform、Microsoft 365、GitHub、Dynamics 365 等,虽然许多企业应用程序开发领导者了解在 Azure 上创建应用程序的价值,但事实是您可以将整个 Microsoft 云作为应用程序平台. 有一篇文章:在 Microsoft 云上构建应用程序 从应用程序开发角度介绍了 Microsoft 云的大局,重点介绍领导者必须执行的操作才能取得成功。
张善友
2022/05/31
8390
在 Microsoft 云上构建应用程序
在 .NET 应用程序中运行 JavaScript
前几天我在做一个副业,意识到我需要使用一些 JavaScript 功能。一想到要再次处理 Node.js 和 npm,我就完全放弃了,所以我决定研究一下在 .NET 应用程序中运行 JavaScript 的可能性。很疯狂吧?实际上,这出乎意料的简单。
独立观察员
2022/12/06
2.6K0
在 .NET 应用程序中运行 JavaScript
在 Azure 上构建和部署云原生应用程序和容器化应用程序
在 Azure 上有许多选项可供团队构建和部署云原生应用程序和容器化应用程序。不存在适合每个用例和每个团队的完美解决方案。
张善友
2022/03/30
1.2K0
adb shell 启动,停止 android 应用程序一、adb启动 应用程序二、adb停止 应用程序
包名和Activity类的类名一定要输入正确,可以用re-sign工具(在最后的弹出信息框会显示出包名和Activity类名)。
一个会写诗的程序员
2018/08/20
5.9K0
web 应用程序_web应用程序是什么意思
  根据联机方式与所使用的网络服务不同,会有不同的通信协议。例如,发送信件时会使用SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),传输文件会使用FTP(File Transfer Protocol,文件传输协议),下载信件会使用POP3(Post Office Protocol 3,邮件协议)等,而浏览器跟Web服务器之间所使用的沟通方式则是HTTP(HyperText Transfer Protocol)。Http协议基本上是一种基于请求(Request)/响应(Response)的通信协议,是无状态的通信协议。浏览器在使用http发出请求时,可以有几种请求方法,例如GET、POST、HEAD、PUT、DELETE等,但是对于Servlet或JSP程序而言,最长接触的就是GET与POST协议了。
全栈程序员站长
2022/09/20
1.1K0
将基于MicroProfile的Java应用程序部署到Bluemix
本文介绍如何将基于MicroProfile的Java应用程序部署到Bluemix上。首先介绍了MicroProfile的基本概念,然后描述了如何利用Bluemix的Microservice Builder构建新的微服务。接着,本文详细说明了如何将微服务部署到Kubernetes,并提供了示例代码。最后,本文提供了将服务部署到Kubernetes的步骤和示例代码。
Techeek
2018/01/05
1.3K0
将基于MicroProfile的Java应用程序部署到Bluemix

相似问题

在不使用storekit的应用程序购买中

21

在应用程序购买中恢复StoreKit错误

11

应用程序购买中的苹果StoreKit错误

20

iOS StoreKit -通过应用程序登录购买应用程序

21

在应用程序之外的应用程序购买

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文