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

项目背景:

该项目是在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 去哪儿对接项目某服务分支

 

 

 

 

 

http://www.cnblogs.com/huangtailang/p/4702355.html

时间: 2024-12-31 15:06:24

如何对 GIT 分支进行规划? (转)的相关文章

git分支原理命令图文解析

本地分支解析 git 通过可变指针来实现对提交数据的历史版本的控制,每当我们提交新的更新,当前分支(设为master)则指向最后一个提交更新A,而最后一个提交对象则存在一个指针指向前一次的提交更新Q.如果我们创建一个新的分支,child,它和master共同指向A,这时,如果我们向child分支提交更新B,我们会发现child指向B,而master依然指向A.无论我们在child分支进行了任何开发,只要回到master分支,就能恢复到更新A的数据状态了. 在图片里,我们还注意到有一个head指针

Git分支本地操作详解

引言 在上一节中我们对Git的常用本地操作的命令进行详解,而本节要讲解的是Git的分支, 在讲解之前补充两点概念性的东西: 第一个: 第一节中一个读者提出的疑问,Git和SVN在版本控制中存储方式版本信息的差异. 答:Git关心文件的整体是否发生变化,而SVN则关心的是文件内容的具体差异! SVN每次记录的是有哪些文件进行了修改,以及修改了哪些行的哪些内容: 如上图,比如版本2中记录的是文件A以及文件C的变化,而版本3中仅仅记录文件C 的变化这样,以此类推:而Git并不保存这些前后变化的差异数据

git 分支的创建、合并、删除

 基本概念与命令 分支(branch):每次提交,Git都把提交的内容串成一条时间线,这条时间线就是一个分支 .   git 分支的创建 git branch branchName git 分支的切换 git checkout  branchName git 分支的创建和切换:git checkout -b branchName gt 分支的合并 git merge git分支的删除  git branch -d branchName git分支的查看  git branch      具体步骤

Git学习-->关于Jenkins编译时候,如何获取Git分支的当前分支名?

一.背景 因为代码都迁移到了Gitlab,所以Jenkins编译的时候我们都需要将之前的SVN信息换成现在的Git信息.最近编译一个Lib库的时候,因为团队规定上传Release版本的AAR到Maven的话,必须需要在Jenkins上编译而且Git Branch 必须是master分支才能够上传到Maven. 因此我们就需要在Gradle脚本中,获取Git Branch ,Git Commit等相关信息.但是在获取Git Branch的时候出现了问题,在本地Android Studio编译的时候

git学习------>Git 分支管理最佳实践

ps:本文转载于 : https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html Git 是目前最流行的源代码管理工具.大量的软件项目由 GitHub.Bitbucket 和 GitLab 这样的云服务平台或是私有的 Git 仓库来管理.在使用 Git 时通常会遇到的一个问题是采用何种分支管理实践,即如何管理仓库中作用不同的各类分支.和软件开发中的其他实践一样,Git 分支管理并没有普遍适用的最佳做法,而只有对每个团队

Git详解之三:Git分支

原文链接:http://blog.jobbole.com/25877/ 原文:<Pro Git> Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间.(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读) 有人把 Git 的分支模型称为"必杀技特性",而正是因为它,将

tortoisegit git分支的学习笔记

做自己的产品,分支还是很重要的.例如,我发布了一个app,但是有bug,又想做新功能,怎么办呢?如果只在一个git上开发的话,bug会越来越多,原来bug没改完,新功能开发,又会产生新的bug.这样的话,bug永远改不完,版本发布会一拖再拖.   正确的做法,主分支,开发新功能,创建的分支改bug,定期的将分支合并到主分支,对外发布的版本都新分支,改bug的版本,属于稳定版的.发版本成阶梯状.下面介绍一下用tortoisegit创建git分支的方法,个人觉得比较简单.   1,clone二个版本

Git 分支概述

1.1 Git 分支 - 分支简介 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个略微低效的过程--常常需要完全创建一个源代码目录的副本.对于大项目来说,这样的过程会耗费很多时间. 有人把 Git 的分支模型称为它的"必杀技特性",也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处理分支的方式可谓是难以置信的轻量,创建新分支

在 Shell 提示符中显示 Git 分支名称的方法_linux shell

Git 的好处之一就是把代码的分支管理变成了一件极其便捷的事情,分支只保留差异,不用复制任何文件,不用连接网络,快速创建,用完即删.Git 分支与项目的复杂程度无关,不管你的项目多么复杂,创建 Git 分支永远都是瞬间的事情.同时,因为保留了父类分支的信息,所以分支的合并也变得异常简单. 当在一个项目中频繁使用多个分支时,可以使用 git status 命令查询自己现在正工作在哪个分支下面,不过难免有脑子发昏的时候,忘记自己在哪个分支下面,因而发生误操作之类的杯具. 那么把分支显示在 Shell