Git官网给出了三种分布式工作流程:

  • 集中式工作流程
  • 集成管理者工作流
  • 司令官与副官工作流

这里以私有gitserver服务器上的git-test项目为例,简单说明集中式工作流程。

基于分支的开发策略

分支简介

参考Git Pro

使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

使用Git开发的过程中,鼓励使用分支进行迭代开发,分支的创建、删除、合并非常简单,任何主题(新特性,bug,test,idea...)都可以在单独的分支上存在。

本地分支策略

参考Git Pro

Git管理的项目,有一个默认分支master,可以理解为项目的主分支,其他分支可以根据需要创建。

一般来说,master分支只负责版本发布,实际开发过程在类似于dev分支或develop的分支上完成。而每个新特性或每次迭代都在各自独立的分支上开发,最后合并到dev分支。

从服务器克隆项目

cd <work dir>
git clone git@gitserver:/git/git-test
cd git-test

设置跟踪分支并拉取内容

从远程克隆的项目只有master分支的内容,本地master分支默认跟踪远程的master分支,即origin/master。而本地dev分支跟踪远程dev分支需要手动设置。可以使用以下方式:

git checkout --track origin/dev

git checkout -b dev origin/dev

这样以来,本地dev分支和origin/dev就建立了联系,可以直接push或pull,可以用git branch -vv查看所有的跟踪分支。

要设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支,可以使用 -u 或 --set-upstream-to 选项运行 git branch 来显式设置:

git checkout dev
git branch -u origin/dev

本地开发

为了降低开发复杂度,强烈建议本地开发使用分支,每个新特性和迭代都可以建立新的分支,完成后合并到本地dev分支。

同步仓库

注意:

只能推送本地dev分支到远程dev分支,master分支只用于版本发布,可以定期从服务器拉取master分支以同步仓库内容。

由于是分布式开发,推送前一定要将其他人提交到库的内容合并到本地,这也可以避免推送时的冲突。有两种合并方式,一种是使用pull命令,一种是先fetch然后合并,pull直接合并远程分支的内容到本地,有一定的风险,推荐使用第二种。

fetch

git fetch origin

该命令会拉取origin的所有分支到本地,可以通过一个特殊的名字FETCH_HEAD来显示远程和本地的差异:

git log -p HEAD..FETCH_HEAD

也可以

git diff dev origin/dev

该命令会显示远程仓库内最新的内容,合并远程dev分支到本地可以使用merge。

merge

git checkout dev
git merge origin/dev

解决合并冲突可以参考Git Pro

rebase可以避免将开发的细节过程推送到服务器,提交信息显得比较清爽干净。但是,rebase只可以用于本地的分支合并,不要对在你的仓库外有副本的分支执行变基。这样会使其他人强制rebase自己的分支,最终会导致很多问题。

如果你遵循这条金科玉律,就不会出差错。 否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你。

更多内容可以参考Git Pro的变基部分。

推送dev分支

git push origin dev

Git分布式工作流程的更多相关文章

  1. 【Git项目管理】分布式 Git - 分布式工作流程

    分布式 Git - 分布式工作流程 你现在拥有了一个远程 Git 版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉了基本 Git 命令.你现在可以学习如何利用 Git 提供的 ...

  2. git教程——工作流程

    Git 工作流程 本章节我们将为大家介绍 Git 的工作流程. 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修 ...

  3. Git的工作流程

    git的工作流程为: 克隆Git资源作为工作目录 在克隆的资源上添加或者修改文件 如果别人修改了,你可以更新资源 在提交前查看修改 提交修改 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交 ...

  4. 4. Git基本工作流程

    4. Git基本工作流程 Git工作区域 向仓库中添加文件流程

  5. 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程

    1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...

  6. 基于git的工作流程

    本文针对的是追求极致.快速的产品响应团队的.以下的观点和内容都是围绕这个主题,暂时不涉及个人学习和团队学习. 在说工作流程之间,想说一下我们平常工作中遇到的一些困惑或者说现象 在一个团队里,同时有好多 ...

  7. git的工作流程(分支合并)

    git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如下: 去自己的工作分支$ git checkout work 工作.... 提交工作分支的修改$ ...

  8. Subversion/Git/ReviewBoard工作流程

    根据My (work)Git Workflow进行修改,在 Windows下进行测试,http://mojodna.net/2009/02/24/my-work-git-workflow.html 目 ...

  9. 理解Git的工作流程(转)

    英文原文:Understanding the Git Workflow 如果你不理解Git的设计动机,那你就会处处碰壁.知道足够多的命令和参数后,你就会强行让Git按你想的来工作,而不是按Git自己的 ...

随机推荐

  1. js--常量,变量

    常量 内存中的一个的固定的地址,其中的数值也是固定的 变量 内存的一个地址,其中的内容有我们更改维护 值类型与引用类型 改变值类型的变量时,影响值的变量 全大写的名称一般为常量 var a = 1 v ...

  2. Spring框架的设计理念

    它这种设计策略完全类似于Java实现OOP的设计理念,当然Java本身的设计要比Spring复杂太多太多,但是它们都是构建一个数据结构,然后根据这个数据结构设计它的生存环境,并让它在这个环境中按照一定 ...

  3. 数据库分库分表(一)常见分布式主键ID生成策略

    主键生成策略 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,下面介绍一些常见的ID生成策略. Sequence ID UUID GUID COMB Snowflake 最开始的自增ID为了实 ...

  4. 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别

    最近在看NVMeDirect和SPDK的源码,觉得有必要梳理一下MMIO和PMIO的区别.关于MMIO和PMIO,维基百科上是这么讲滴, Memory-mapped I/O (MMIO) and po ...

  5. Xml解析过程中遇到“” 1 字节的 UTF-8 序列的字节 1 无效“”问题---idea与eclipse同适用

    转载自:http://blog.csdn.net/zhangzhikaixinya/article/details/7727938 今天在eclipse中编写pom.xml文件时,识别到错误:Inva ...

  6. Flume1.6.0搭建

    下载地址:http://archive.apache.org/dist/flume/ 解压完毕 切换到安装目录下/usr/local/flume/apache-flume-1.6.0-bin/conf ...

  7. 【转】让Entity Framework不再私闯sys.databases

    这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名 ...

  8. 一个简单好用的强制删除软件geek

    给大家推荐geek软件工具,一个可以用来强制卸载那些常规手段无法卸载的软件,到官网(https://geekuninstaller.com/download)下载免费版,运行软件后,选择需要强制删除软 ...

  9. Angular 4+ 修仙之路

    Angular 4.x 快速入门 Angular 4 快速入门 涉及 Angular 简介.环境搭建.插件表达式.自定义组件.表单模块.Http 模块等 Angular 4 基础教程 涉及 Angul ...

  10. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...