Git分布式工作流程
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分布式工作流程的更多相关文章
- 【Git项目管理】分布式 Git - 分布式工作流程
分布式 Git - 分布式工作流程 你现在拥有了一个远程 Git 版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉了基本 Git 命令.你现在可以学习如何利用 Git 提供的 ...
- git教程——工作流程
Git 工作流程 本章节我们将为大家介绍 Git 的工作流程. 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修 ...
- Git的工作流程
git的工作流程为: 克隆Git资源作为工作目录 在克隆的资源上添加或者修改文件 如果别人修改了,你可以更新资源 在提交前查看修改 提交修改 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交 ...
- 4. Git基本工作流程
4. Git基本工作流程 Git工作区域 向仓库中添加文件流程
- 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程
1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...
- 基于git的工作流程
本文针对的是追求极致.快速的产品响应团队的.以下的观点和内容都是围绕这个主题,暂时不涉及个人学习和团队学习. 在说工作流程之间,想说一下我们平常工作中遇到的一些困惑或者说现象 在一个团队里,同时有好多 ...
- git的工作流程(分支合并)
git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如下: 去自己的工作分支$ git checkout work 工作.... 提交工作分支的修改$ ...
- Subversion/Git/ReviewBoard工作流程
根据My (work)Git Workflow进行修改,在 Windows下进行测试,http://mojodna.net/2009/02/24/my-work-git-workflow.html 目 ...
- 理解Git的工作流程(转)
英文原文:Understanding the Git Workflow 如果你不理解Git的设计动机,那你就会处处碰壁.知道足够多的命令和参数后,你就会强行让Git按你想的来工作,而不是按Git自己的 ...
随机推荐
- AutoMapper控件
1.下载AutoMapper控件. 2.定义类,实现Profile. 3.在定义类的构造方法中使用如下代码进行转换 // 1.匹配,o,t代表TDestination;s代表TSource,返回TDe ...
- STIL文件(DFT/IC测试方向)
相信很多工程师,特别是刚入行或准备入行的兄弟们或多或少听过测试相关的东西.如果你想做DFT工程师的,测试工程师的,而对于设计/验证工程师们如果能了解下STIL文件的原理,在和DFT/测试工程师聊技术聊 ...
- 入门系列之使用fail2ban防御SSH服务器的暴力破解攻击
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM发表于云+社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击--远程攻击者通过不同的密码来无限次地进行登录尝试.当 ...
- mysql存储之int
开始之前给大家出个问题,数据库表test中两个字段 a int(2),b int(3),现在想执行下面的插入语句 ,) 思考是否可以插入? 答案是能插入 再看下面的语句 ,) 思考能不能插入?注意第 ...
- winform从table1获取需要的数据转存储到table2中
小技术一个,记录一下 ,以下记录的是用两种方式来实现,数据表的转移 table转存数据之前首先要明确两个函数: Add():是指在最后一行添加一行 InsertAt():可以插入到表中的指定行 需求: ...
- 【原】zookeeper集群配置常见问题说明
zookeeper集群网上demo一大堆,补充一下一些不明白的地方 1 复制2份zookeeper,savle作为备份节点 2.配置zoo.cfg # The number of millisecon ...
- 关于JAVA是值传递还是引用传递的问题
1.概念 值传递:方法调用时,实际传入的是它的副本,在方法中对值的修改,不影响调用者的值. 引用传递:方法调用时,实际传入的是参数的实际内存地址,调用者和调用方法所操作的参数都指向同一内存地址,所以方 ...
- linux环境下mysql 5.7.1X 如何重置root密码
1,vi /etc/my.cnf [mysqld]下加入参数skip-grant-tables 保存退出. 2,重启mysql [root@21yunwei src]# /etc/init.d/ ...
- Web运行控制台输出乱码解决总结
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- php中怎么导入自己写的类
如果写的类是写在当前php文件内,就直接实例化若你的类写在其他的php文件里,就要先用include或require,将类文件引入<?php include("class.php&qu ...