【Git教程】(十九)合并小型项目 — 概述及使用要求,执行过程及其实现,替代解决方案 ~

Git教程 · 合并小型项目

  • 1️⃣ 概述
  • 2️⃣ 使用要求
  • 3️⃣ 执行过程及其实现

在这里插入图片描述

在项目的初始阶段,往往需要针对重要的设计决策和技术实现原型实验。当原型评估结束后,需要将那些成功的原型合并起来称为整个项目的初始版本。

在这样的情景中,各个原型会分散在不同的版本库中有不同的版本。当整个项目启动时,最好建立一个公共版本库,将不同原型中的文件合并到这个版本库中。

考虑另外一种情景,项目的初始版本过分模块化并且版本独立。随后会出现相同的修改需要在不同的版本库中同步执行,并且修改文件需要在不同版本库中相互转移。将它们合并到同一版本库也可以解决这个问题。
本章的工作流会演示在Git 中合并多个版本库,同时:

  • 保留所有文件的历史版本;
  • 保留所有版本库的标签。

1️⃣ 概述

这段工作流可执行的基础是Git支持使用fetch命令将提交从多个版本库导入同一版本库中 。Git 并不要求被合并导入的提交拥有共同的源版本。

在这里插入图片描述

如图顶部所示后端 (backend) 和前端 (ui) 两个版本库将作为待合并的项目示例。
将所有提交导入到同一版本库之后,将会产生两套不同提交历史。如果切换至后端或者前端项目某一个特定的历史版本提交,那么工作区只会显示被选取项目的文件。

创建公共项目中重要的一步是使用 merge 命令合并那些不相关的历史提交。为了准备合并,有必要为现有的每个项目创建一个新的根目录,并把它们当前所有文件移到该根目录下(新文件目录分别命名为backend 和 ui) 。合并之后,公共项目的根目录将包
含两个子目录 ( backend 和 ui), 如图底部所示。


2️⃣ 使用要求

不同的标签:每个项目都需要有不同的标签名。如果不同的项目中含有相同的标签,必须将它们删除或者重新创建一个独特唯一的标签名。

许多项目,每一个都有独立的版本库,需要将它们合并到一个公共的版本库中,并保留各自的提交历史。


3️⃣ 执行过程及其实现

随着接下来的操作步骤,将演示两个版本库 (前端和后端) 的合并。合并前每个版本库都有一个主分支。合并后将只有一个版本库和一个主分支。

  • 第1步:创建一个主版本库
    首先,克隆后端版本库而创建一个新的公共版本库,并切换至新的工作区。

    > git clone backend common
    > cd common
    
  • 第2步:将文件移到该项目专属文件目录下
    创建一个名为 backend 的后端项目文件目录,可以避免合并前端项目时的文件冲突。

    > mkdir backend
    

    接着,将所有的文件移到这个文件夹中,可以使用 mv 命令来执行这一操作。文件和文件目录的整理属于操作系统层面的操作,也需要在Git系统中使用addrm 命令,将添加和删除文件的操作纳入到待提交修改中。

    > git mv src test backend
    

    最后,操作完成,使用 commit 命令提交修改。

    > git commit -m "backend directory created"
    
  • 第3步:导入另一个版本库
    为了导入前端版本库,首先在公共版本库中创建一个新的远程端点。

    > cd common
    > git remote add ui ../ui/
    

    使用 fetch 命令,将前端版本库所有的Git 对象(包括分支、标签、版本提交)导入公共版本库中。

    > git fetch ui
    

    注意! 如果待导入的前端版本库中的标签已经在公共版本库中存在同名标签,那后导入的标签将被忽略。

  • 第4步:将导入的文件移到该项目专属文件目录下
    下一步,为导入的项目文件创建一个名为ui 的前段项目文件目录。由于首先导入的后端项目已存在 master 分支,需要为前端项目中同名的 master分支另外创建一个本地分支名,在 此命名为 uimaster。

    > git checkout -b uimaster ui/master
    

    上述参数分别代表如下含义。

    • -b: 创建一个新分支并设为活动分支。
    • uimaster: 本地分支名。
    • ui/master: 引用远程版本库ui 中的 master 分支。

    如同上文第 2 步中操作步骤,创建前端项目文件目录并将项目文件移至该目录下。

    > mkdir ui
    > git mv src test ui
    > git commit -m "ui directory created"
    
  • 第5步:合并项目
    在两个项目分别导入了公共版本库,并有各自独立的项目文件目录,接下来执行合并操作。
    合并操作在 master 分支上执行,将其设为活动分支。

    > git checkout master
    

    使用 merge 命令将 uimaster 分支合并入 master 分支。因为两个分支中文件在不同的两个文件目录下,所以合并不会发生冲突。

    > git merge uimaster
    

    合并的结果可以由图形化日志 ( log) 命令查看,可以方便地查看到两个独立发展的项目原提交历史。

    > git log --graph --oneline
    e40fcb2 Merge branch 'uimaster'
    |\
    | \\
    | * ace51c9  ui directory created
    | * 40feb24  foo and bar added
    * f8bd134 backend directory created
    * fa1482a bar added
    * bddfa53 foo added
    

    删除专门用来的执行合并操作的临时分支 uimaster。

    > git branch -d uimaster
    

    这样就完成了,合并得到一个公共分支,包含两个项目的全部历史和标签。

可不可以跳过第2步和第4步呢? 为什么要为每个项目创建项目独立的文件目录呢?
如果不创建新的文件目录,那么合并命令执行时将尝试合并两个项目的根目录到一个根目录,并合并其中文件。两个项目中相同的文件将被合并至一个文件并且需要解决冲突。

如果要合并两个前期不相关的项目,那同名同目录文件需要被合成一个文件的情况可能很少见。大多数情况遇到同名文件,需要移动或者重名其中一个来解决冲突。文件系统层面的操作在合并开始前执行比合并过程中执行要容易一些。

本章上述流程阐述了合并项目文件是可以通过为不同的项目创建专属的子文件目录并分别版本化管理来实现的。



温习回顾上一篇(点击跳转)
《【Git教程】(十八)拆分大项目 — 概述及使用要求,执行过程及其实现,替代解决方案 ~》

继续阅读下一篇(点击跳转)
《》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/703751.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop Java API操作 及读取序列化文件(04-05-06)

针对于04-05-06班级整合。 1.创建java项目 2.修改pom.xml文件 添加依赖 <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.4</version></dependenc…

RocketMQ:新增consumer消费组group从最新消息开始消费skip last offset message

场景 想创建一个新的consumer去消费一个已经再使用的topic时&#xff0c;默认情况下会从topic中的第一条消息开始消费&#xff0c;大多数情况是需要从最新的消息开始。然后再使用CONSUME_FROM_LAST_OFFSET设置时并不会对新的consumer生效&#xff0c;它只是在停用consumer重新启…

【MySQL】表的增删改查 | CRUD | 新增 | 查询 | 修改 | 删除 | 数据库约束

文章目录 表的增删改查一、CRUD1.新增&#xff08;Create&#xff09;1.插入多行2.指定列多行插入3.插入datetime类型4.插入当前时间5.插入查询的结果 2.查询&#xff08;Retrieve&#xff09;1.全列查询 *2.指定列查询3.查询字段为表达式4.指定别名 as5.去重 distinct6.排序 o…

算法分析与设计复习__递归方程与分治

总结自&#xff1a;【算法设计与分析】期末考试突击课_哔哩哔哩_bilibili 1.递归&#xff0c;递归方程 1.1递归条件: 1.一个问题的解可以分解为几个子问题的解&#xff1b; 2.这个问题与分解之后的子问题&#xff0c;除了数据规模不同&#xff0c;求解思路完全一样; 3.存在…

Python从0到100(二十四):正则表达式的应用

正则表达式是一种用于字符串搜索和操作的强大工具&#xff0c;它允许你使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在编程中&#xff0c;正则表达式被广泛应用于文本处理&#xff0c;如模式搜索、文本替换、字符串验证等。 1.正则表达式基础 正则表达式由一…

Edge(微软)——一款充满创新精神的浏览器

随着科技的不断进步&#xff0c;互联网浏览器已经成为我们日常生活中不可或缺的工具。在这个领域&#xff0c;微软Edge作为一款新型的浏览器&#xff0c;凭借其独特的功能和优秀的性能&#xff0c;逐渐在市场上占据了一席之地。本文将深入探索微软Edge的特点、优势以及它如何改…

【MySQL 数据宝典】【事务锁】- 002 事务控制的演进

一、事务处理思路 1.1 排队 排队处理是事务管理最简单的方法&#xff0c;就是完全顺序执行所有事务的数据库操作&#xff0c;不需要加锁&#xff0c;简单的说就是全局排队。序列化执行所有的事务单元&#xff0c;数据库某个时刻只处理一个事务操作&#xff0c;特点是强一致性…

测缝计测量的是实际缝宽吗?

在土木工程中&#xff0c;测缝计作为一种重要的监测工具&#xff0c;广泛应用于桥梁、隧道、大坝等大型结构中&#xff0c;用以测量和监控结构接缝或裂缝的实际宽度变化。然而&#xff0c;有些人可能会产生疑问&#xff1a;测缝计测量的是实际缝宽吗?本文将对这一问题进行深入…

六西格玛管理培训对企业有哪些实际帮助?

当下&#xff0c;企业要想脱颖而出&#xff0c;不仅要有创新思维和敏锐的市场洞察力&#xff0c;更要有高效的管理体系和严谨的质量控制手段。而六西格玛管理培训正是这样一项能够帮助企业实现提质增效、提升竞争力的关键举措。那么&#xff0c;六西格玛管理培训对企业究竟有哪…

亲子失和最大的内耗是:家长总是“说硬话,办软事”!

一声爸妈&#xff0c;一辈子的责任&#xff0c;操不完的心、做不完的事。 然而&#xff0c;爱太满&#xff0c;注定会溢出。爱有边界&#xff0c;我们是父母&#xff0c;更是自己&#xff01; 01 前些时候悠悠起床又开始混账了&#xff01; 气愤的是&#xff0c;周末休息那…

MES系统在电线电缆行业生产上的应用

MES系统在线缆行业的应用可以带来多重价值&#xff0c;包括提高生产效率、降低生产成本、提高产品质量、优化库存管理、改善生产环境和提高企业竞争力等方面。因此&#xff0c;在电线电缆行业中广泛应用MES系统可以提高企业的经济效益和社会效益&#xff0c;推动企业发展和行业…

平芯微PW4056HH中文规格书

概述 PW4056HH 是一款完整的采用恒定电流/恒定电压的高压、大电流、单节锂离子电池线性充电 IC。充电电流可达 1A。输入 MAX 低工作电压 3.75V&#xff0c;降低充电功耗&#xff0c;提高效率。 PW4056HH 采用了内部 PMOS 架构&#xff0c;加上防反充电路&#xff0c;不需要外部…