项目背景:
该项目是在2011年11月份使用Asp.net三层帮荷兰某个客户开发的机票预定系统
该客户主要是做中国与欧洲的旅行社业务,特别是最近两年由于中国的发展因此客户也越来越重视机票业务
于是他们跟去哪儿沟通并进行了合作,并我司来完成与去哪儿机票业务的对接业务
因为该客户项目从一开始就由我来负责,因此该对接业务也就自然而然的落到我的身上 
 
问题描述:
因为对接功能需要与现在的项目进行整合,因此我只是在机票预定系统的解决方案里添加了一个新项目(Qunar),并且使用Git来分别进行版本控制(2015前使用VSS,就是因为Git的分支功能)
 
后面由于去哪儿某个功能是在另一个API里实现的,而且跟对接功能也没有太大的关系,因此又将其作为一个单独的项目(QunarServices)来完成
 
在进行对接功能期间网站项目也有变更(对接功能会影响到网站后台的某个功能)
因为这三个分支实现的功能大部分是不一样的,所以我只能按不同的分支来进行管理
重点是在三个项目之间(四个分支加上master)同时进行开发,因为所有项目都使用了N个通用的项目(Model等)所以当某个分支对通用的组件项目进行了变更后,其他的三个分支也需要同步以保持一致(某些分支如果不同步可能也不会影响该分支的功能,只是三个分支通用项目进行同步)
 
关于如何合并其他分支的某些文件,我现在的处理流程是这样的:
  1. 先检验当前分支与要合并分支通用文件的差异(要合并的分支必须要全部commit)
  2. 拉出要“合并某分支文件有差异”的所有文件(通用项目中的文件) git checkout 分支名称 文件名 文件名
  3. 添加并commit到当前分支 git commit -a -m '注释 合并其他分支的某些文件 和合并分支提交时的说明信息'
 
当通用的项目文件很少更改时,以上方案运行的不错
最近去哪儿项目正在收尾阶段,因此在对解决方案进行整合,然后我就发现三个分支里的通用项目都有差异(最近三个分支都对通用项目进行变更且没有合并)
这样就对我整合解决方案带来了很多阻力(我需要将三个分支的通用项目时行合并)
因为通用项目都只是引用了该通用项目的DLL组件而已,所以完全没有必要在每个分支里进行维护(已经从2015年初到至今)
于是我就在想是不是我的解决方案规划有问题而导致了我错误的使用了Git,但如果有问题的话我该如何规则分支和解决方案呢?
 
问题来了:如何在尽量不丢失提交历史的情况下对整个解决方案和分支进行重新规则
 
想到的解决方案:
  1. 在不改变当前分支的情况下,在每个分支里将通用项目进行过滤(不删除项目文件),只将其保留master分支(master从2015后没有进行过合并,需要合并所有通用项目的提交历史大概有50+要循环以上合并流程)
  2. 将通用项目从每个分支过滤,并单独作为一个单独的分支进行维护(同1类似也需要循环以上合并流程)
  3. 删除所有分支并重建(不可能,有很多提交历史)
  4. 其他??
目前分支说明:
master:VSS迁移后的Web基准分支(2015年从VSS迁移后无提交)
website:基于master web项目分支
qunar2:基于master 去哪儿对接项目分支
qunarTTS:基于qunar2 去哪儿对接项目某服务分支
 
 

如何对 GIT 分支进行规划?的更多相关文章

  1. 如何对 GIT 分支进行规划? (转)

    项目背景: 该项目是在2011年11月份使用Asp.net三层帮荷兰某个客户开发的机票预定系统 该客户主要是做中国与欧洲的旅行社业务,特别是最近两年由于中国的发展因此客户也越来越重视机票业务 于是他们 ...

  2. 团队项目的Git分支管理规范

    原文地址: http://blog.jboost.cn/2019/06/17/git-branch.html 许多公司的开发团队都采用Git来做代码版本控制.如何有效地协同开发人员之间,以及开发.测试 ...

  3. Git 分支

    Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...

  4. Git分支管理

    一.Git分支的使用 查看分支: git branch 创建分支: git branch branch1 切换到branch1 git checkout branch1 再用git branch查看, ...

  5. Git分支的前世今生

    摘自Jack__CJ  CSDN博客,写得很好,保存一下. 导读 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系 ...

  6. GIT分支管理模型

    GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...

  7. Git详解之三 Git分支

    相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...

  8. git初体验(三)git分支

    分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...

  9. 如何在终端实时展现git分支

    在微博上看到ghosTM55在终端可以实时展现出当前运行的分支,觉得很奇特,于是google了一把.这里面存在两个内容,第一个bash,第二个是git bash基础: 了解到linux的shell存在 ...

随机推荐

  1. Slickflow.NET 开源工作流引擎高级开发(一) -- 流程外部事件的调用和变量存储实现

    前言:流程实现基本流转功能外,通常也需要调用外部事件,用于和业务系统的交互,同时存储一些流程变量,用于追踪和记录业务数据变化对流程流转的影响. 1. 流程事件 流程执行过程中,伴随各种事件的发生,而且 ...

  2. DMA Stream/Channel Outputting via GPIOC[0..7]

    Ok, so quickly mashing up another example using a different TIM, DMA Stream/Channel for illustration ...

  3. PHP 如何创建守护(daemon)进程

    先讲几个概念 守护进程: Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动,在系统关闭时终止. ...

  4. mysql函数的使用

    最近总感觉sql语句不对劲,所以就看了一些官方文档发现了一些以前没有注意的函数:感觉在查询的时候可以用得上,毕竟是内置函数,用起来效率应该会好一些的: FIND_IN_SET(str,strlist) ...

  5. oracle exp/imp命令详解

    E:\>exp help=y 通过输入 EXP 命令和用户名/口令,您可以 在用户 / 口令之后的命令: 实例: EXP SCOTT/TIGER 或者,您也可以通过输入跟有各种参数的 EXP 命 ...

  6. 数据访问:Implementing Efficient Transactions

    An OLTP scenario is characterized by a large number of concurrent operations that create, update, an ...

  7. Java 8新的时间日期库的20个使用示例

    原文链接 作者:Javin Paul 译者:之诸暇 除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学 ...

  8. 通用的Bitmap压缩算法,进一步节约内存(推荐)

    前几天我写了一篇通过压缩Bitmap,减少OOM的文章,那篇文章的目的是按照imageview的大小来压缩bitmap,让bitmap的大小正好是imageview.但是那种算法的通用性比较差,仅仅能 ...

  9. .NET零基础入门之01:开篇及CSharp程序、解决方案的结构

    一:为什么选择C# 每个人都有梦想,有些人的梦想就是:成为程序员.最课程(www.zuikc.com)的<零基础c#入门>是试图帮助我们实现这个梦想. 也许你要问:我基础很差怎么办?最课程 ...

  10. 虚拟机内存复用技术的比较(XEN系统)

    技术途径 业界就该问题定义为虚拟机内存复用(复用干嘛? 当然是为了跑更多的虚拟机呀!) :memory overcommit.围绕次问题主要有4种技术手段,下面简要介绍和分析: 1 气泡驱动(ball ...