【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.mzph.cn/news/838863.shtml

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

相关文章

php代码审计参考

代码审计思路: 从个人角度出发,如果环境允许的话,可以先选择做一个”程序员“再来做代码审计。因为从开发者的位置去思考问题,可以快速定位问题。学习面向对象编程以及面向过程编程,编写一些 项目提升对代码的理解能力…

Android Compose 六:常用组件 Button

Button 1 简单使用 Button(onClick { /*TODO*/ }) {Text(text "我是一只button里的text")}效果 颜色为什么是这个样子? 前面Text里我们讲过 主题色会影响组件的颜色 这里我使用的颜色如下 primary Color(0xFFFF0000),onPrimary Color(0xFF00FF00),p…

什么是合法IP地址?

IP地址,即互联网协议地址,是网络设备在互联网上进行通信的唯一标识符。IP地址有两种主要版本:IPv4和IPv6。为了保证网络通信的正常进行,IP地址需要是合法的。本文将详细阐述什么是合法IP地址,以及其重要性和验证方法。…

如何给实拍添加旋转模糊效果?视频模糊特效PR模板剪辑素材

PR特效模板,高级旋转模糊效果视频模板剪辑素材。 特征: After Effects 2019及以上兼容项目。 Premiere Pro 2021及以上兼容项目。 可用分辨率(4K–HD–方形–移动)。 不需要插件。 包括教程。 免费下载:https://prmu…

宝藏级丨图解项目管理全流程(上篇)

《项目管理知识体系指南》的定义:项目是为创造独特的产品、服务或成果而进行的临时性工作。项目管理就是将各种知识、技能、工具与技术应用于项目活动,以满足项目的要求。项目管理的全流程包括以下几个阶段: 项目启动阶段。这是开始一个新项…

GAN实例基于神经网络

目录 1.前言 2.实验 1.前言 需要了解GAN的原理查看对抗生成网络(GAN),DCGAN原理。 采用手写数字识别数据集 2.实验 import argparse import os import numpy as np import mathimport torchvision.transforms as transforms from torchvi…

RedisTemplate使用最详解(三)--- opsForHash()

1、put(H var1, HK var2, HV var3) 新增hashMap值 var1 为Redis的keyvar2 为key对应的map值的keyvar3 为key对应的map值的值var2相同替换var3 redisTemplate.opsForHash().put("hashValue","map1","value1"); redisTemplate.opsForHash().put(&q…

Java官网下载JDK17版本详细教程(下载、安装、环境变量配置)

第一步,去百度搜索甲骨文官网 第二步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 第十步 然后在系统变量里面找到path-编辑-新建添加这个,点击确定就好了 %JAVA_HOME%\bin 就完成了,接下来测试是否成功。 测试: 第一步&a…

VC++6.0 ListViewReport报表使用例子

操作步骤: 1,拖一个ListContorl控件 2,修改ID名称 3,设置Report样式 3,加入初始化代码 void CDuplicatefilesclearDlg::InitlizationListView() {CListCtrl *lstVew (CListCtrl*)GetDlgItem(IDC_LIST_Main);lstVew-&…

“联宝360“项目深度解析:创新模式与互助机制

大家好,我是吴军,来自一家知名的互联网科技公司,负责产品策略分析。 最近,我观察到社交网络上出现了一个名为“联宝360”的热门项目,它引发了众多团队长的热烈讨论和积极推广。这个项目虽然是在今年年初刚刚启动的&am…

羊大师分析,羊奶健康生活的营养源泉

羊大师分析,羊奶健康生活的营养源泉 羊奶,作为一种古老的饮品,近年来因其独特的营养价值和健康益处而备受关注。今天,羊大师就来探讨一下羊奶与健康之间的紧密联系。 羊奶富含蛋白质、脂肪、维生素和矿物质等多种营养成分。羊奶…

如何做一个厂区的导航地图?工厂导航定位怎么解决方案

厂区定位导航是一种基于位置服务(LBS)的导航系统,通过获取厂区内的位置信息,为用户提供准确的导航服务。该系统能够实时显示用户当前位置,提供目的地导航、路径规划、实时定位、语音提示等功能,帮助用户快速…

Process Monitor下载安装使用教程(图文教程)超详细

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等…

maven的安装与配置(超详细)

在Java开发中,配置Maven环境有几个重要的原因: 依赖管理:Maven 是一个强大的依赖管理工具,它能够帮助开发人员轻松地管理项目所需的各种第三方库和组件。通过在项目的 Maven 配置文件(pom.xml)中定义依赖&…

人工智能改善客户体验的10种方式

什么是人工智能客户体验? 人工智能客户体验是指使用人工智能技术(如机器学习、聊天机器人和对话式用户体验)使每个接触点尽可能高效且无障碍的实践。本质上,客服代表得到了一个虚拟助手帮助他们完成重复性任务。这意味着对于有简…

期权(1):基本概念,权利金,定金,买方,卖方,零和游戏,对赌协议

期权是合约,权利金就是定金! 合约到期时 买方可以选择行权,也可以选择不行权。代价就是定金损失。因此亏损封顶,但盈利无限。卖方赚的就是买方的定金,盈利封顶,但亏损无限。 从这里,我们看出…

C语言例题42、打印金字塔

#include <stdio.h>void main() {int i, j;for (i 0; i < 5; i) {for (j 4; j > i; j--) {//输出空格printf(" ");}for (j 0; j < 2 * i 1; j) {//输出星号printf("* ");}printf("\n");} }运行结果&#xff1a; 本章C语言经…

HTML5实现简洁好看的个人主页,个人小站(多种风格附源码)

文章目录 1.烟灰主题个人主页1.1 个人主页界面1.2 个人信息界面1.3 兴趣爱好界面1.4 个人作品界面 2.紫霞主题个人主页2.1 个人主页界面2.2 个人信息界面2.3 兴趣爱好界面2.4 个人作品界面 3.墨夜主题个人主页3.1 个人主页界面3.2 个人信息界面3.3 兴趣爱好界面3.4 个人作品界面…

优雅谈论大模型5: RAG

RAG 众所周知&#xff0c;大模型以及一些预训练的模型在训练完毕之后会在其参数存储了大量的压缩资讯。但是这样的参数是通过固定的语料库训练而成&#xff0c;训练完毕之后这个模型已经固定了。然而外部资讯瞬息万变&#xff0c;加上大模型本质上为一种概率模型&#xff0c;所…

Nginx读书笔记

Nginx 是高性能的 HTTP 和反向代理的web服务器