Git 在小团队中的管理流程(转)
目标读者:了解 Git 的基本概念,能够使用 Git 进行基本的本地和远程操作。
有关 Git 的基础知识可以参见 知乎回答-怎样使用 GitHub?,天猪(刘勇)给出了一些很好的学习资料。
本文介绍了小团队中 Git 管理的基本使用流程。
小团队的代码管理可以采用这样一种方式:项目存在一个中心远程仓库,作为团队成员进行代码交流的主要场所。同时可以存在一些成员远程仓库,用于局限在团队中部分成员间的代码交流。并将成员分成以下几类不同的角色:负责人、普通组员、预发布责任人 和 版本修复责任人。下面的章节具体介绍了各类角色的 Git 使用流程。
基本须知:
需要多个人共同完成的分支可以建立远程分支,单个人完成的分支只建立本地分支即可。
一、负责人
负责人的职责:管理远程仓库。
负责人的工作均可直接在远程仓库完成。
1.创建项目
- 创建公有项目
 - 添加README.md
 - 添加证书
 - 添加忽略文件
 - 创建 dev 分支
 
2.其他
- 更新 README.md 文件
 
二、组员
工作流程:
- 克隆项目
 - 签出并创建 dev 分支,使其跟踪远程的 origin/dev 分支。
 - 在dev分支基础上创建自己的分支 member* 。
 
- 在自己的分支上添加文件
 - 在自己的分支上修改文件
 - 合并到dev分支
 - 推送dev分支到origin/dev分支
 
// 更新 .gitignore 文件
- 从 dev 新建一个分支 ignore (如果预测变更频繁就建立一个远程分支,现在一般都有模板,偶尔有个没有忽略的直接在dev分支上改就可以了)
 - 更新忽略文件
 - 尽快合并到\推送到 origin/dev 分支 (避免两个组员同时更改该文件造成冲突。)
 
1.创建本地仓库
$ cd [项目路径]
$ git clone https://coding.net/tangyikejun/GitTest2.git
$ git checkout -u -b dev origin/dev
$ git checkout -b [MEMBER_NAME];
2.更新本地仓库
$ git add .
$ git commit -m”your comments”
       // …                                               // 多次提交后完成了一项新的功能,自己的分支下能正常运行
$ git checkout dev
$ git merge --no-ff [MEMBER_NAME]                       // [MEMBER_NAME] 是自己的分支名称
$ git push
3.更新 .gitignore 文件
$ git checkout dev
        //…                                               // 更新忽略文件
$ git add .
$ git commit -m“更新.gitignore文件”
$ git push
4.常用查询命令
$ git branch                                            // 查看自己所在分支 以及自己所拥有的分支
$ git log --pretty=“%h - %cn(%ci): %s” --graph          // 查看自己的提交记录
$ git reflog                                            // 查看自己的操作历史
$ git status                                            // 查看本地仓库当前的文件状态
$ git blame [FILE_PATH] 			                    // 查看文件的每一部分最后由谁改动
5.意外情况处理
意外:推送代码到远程 dev 分支时发生冲突。
解决方案:先把 远程仓库的 origin/dev 分支拉取下来,解决冲突文件后再推送。平时的时候尽量避免不同组员更改同一个文件。
$ git push 
       // …                                               // 遇到错误
$ git pull
       // …                                               // 解决冲突
$ git add .
$ git commit -m”solve conflict:由于XX原因出错,修改XX文件解决问题”
$ git push
意外:不小心把自己的工作成果push到了master分支。
解决方案:先对master进行回退,再使用git push -f将错误的提交删除。
三、预发布责任人 & 版本修复责任人
1.预发布责任人
当需要发布新的版本时,预发布责任人:
- 基于最新的 dev 分支创建一个 release-版本号 分支
 - 进行修缮工作
 - 合并到 dev 分支
 - 合并到 master 分支
 - 打标签
 - 删除 release-版本号 分支
 
$ git checkout dev
$ git pull
$ git checkout -b release-1.2
        //…                                               // 进行修缮工作
$ git checkout dev
$ git merge --no-ff release-1.2
$ git checkout master
$ git merge --no-ff release-1.2                         // 在评论中写入相比上个版本新增的功能,修复的bug等详细内容
$ git tag v1.2
$ git branch -d release-1.2
使用 git show [TAG_NAME]可以查看标签对应的提交信息。
2.版本修复责任人
当新发布的版本发现 bug 时,版本修复责任人:
- 基于最新的 master 分支创建一个 hotfix-版本号 分支
 - 进行debug工作
 - 合并到 master 分支
 - 打标签
 - 合并到 dev 分支
 - 删除 hotfix-版本号 分支
 
$ git checkout master
$ git pull
$ git checkout -b hotfix-1.2.1
        //…                                               // 进行修缮工作
$ git checkout master
$ git merge --no-ff hotfix-1.2.1
$ git tag v1.2.1
$ git checkout dev
$ git merge --no-ff hotfix-1.2.1                        // 在评论中写入修复的bug等详细内容
$ git branch -d hotfix-1.2.1
3.意外情况处理
意外:某组员完成自己的任务后合并到 dev 分支,推送时发现 release 分支的修缮工作更改了自己原来的文件,产生了冲突。
解决方案:把 origin/dev 分支拉取下来,将冲突解决后再次提交。(注意这里解决冲突后 master 分支上的文件与该组员的工作成果依旧是有冲突的。除非该组员解决冲突时不更改 relese 时的修缮代码,而仅仅更改自己的代码来解决问题。因此,一旦有冲突产生,最好双方进行合理交流达成一致意见。减少冲突。)
四、成员远程仓库
当某个团队成员希望其他成员协助完成他的编程任务时,该成员可以为自己的本地仓库创建一个远程仓库作为成员远程仓库,方便其他成员协助。建立成员远程仓库可以避免中心远程仓库的代码交流繁杂混乱。
成员远程仓库在在操作上是中心远程仓库的简化版。仅在细微处有所不同。
1.求助者
- 创建成员远程仓库
 - 添加成员远程仓库
 推送自己的分支到成员远程仓库的 master 分支
拉取成员远程仓库的 master 分支到自己的分支
$ git remote add [ALIAS_NAME] [GIT_ADRESS]
$ git push [ALIAS_NAME]  [BRANCH_NAME]:[BRANCH_NAME_REMOTE] 
$ git pull
举例:
$ git remote add binRepo https://coding.net/chenbin/GitTest2.git
$ git push binbin  binRepo:master                               //由于是第一次推送,该操作已经使得分支binbin 跟踪了远程分支 binRepo/mastr
当某个分支 a 跟踪了远程分支 b,即 b 成为 a 的默认拉取来源,也因此,一个本地分支同一时间只能跟踪一个远程分支。
让本地某分支跟踪远程分支的命令
$ git branch -u [REPO_NAME]/[REMOTE_BRANCH_NAME] [BRANCH_NAME]
// git branch -u binRepo/master binbin
2.协助者
- 克隆成员远程仓库
 - 在 master 分支基础上创建自己的分支 member*
 - 在自己的分支上修改代码
 - 合并到 master 分支后推送到成员远程仓库
 
$ git clone https://coding.net/chenbin/GitTest2.git
$ git checkout -b member1;
        //…                                                       //修改代码
$ git add .
$ git commit -m"我帮你把XX功能完成了"
$ git checkout --no-ff merge member1;
$ git push
http://www.cnblogs.com/tangyikejun/p/4217561.html
												
											Git 在小团队中的管理流程(转)的更多相关文章
- Git 在小团队中的管理流程
		
目标读者:了解 Git 的基本概念,能够使用 Git 进行基本的本地和远程操作. 有关 Git 的基础知识可以参见 知乎回答-怎样使用 GitHub?,天猪(刘勇)给出了一些很好的学习资料. 本文介绍 ...
 - 小团队产品研发管理V0.0.1
		
序言 之前做研发的时候非常鄙视管理,觉得管理的那些人就知道搞政治,后来做了开发主管,以及到部门经理之后,管的人多了发现管理真是门大学问,真的应该每个人都要学习一些基本管理知识,特别是刚入社会的打工人. ...
 - Git在商业项目中的使用流程
		
一 引言 这一篇文章还是记录我在杭州工作的总结. 我刚来公司的时候,对Git的使用很头痛,因为在学校里面很少用这个东西,即使用,一般也只有一个分支,不会出现代码冲突和代码合并的情况.但是公司里面一个项 ...
 - git分支在团队中的使用
		
须知 在介绍分支常用操作之前 我们需要知道几点: 1.主干不允许做任何修改结构或者业务的操作. 有两种情况可以修改主干: 就是当前主干已经是有问题的,合并后出问题发布不了. 修改与业务无关的配置文件, ...
 - 记一次小团队Git实践(上)
		
公司规模不大,成立之初,选择了svn作为版本控制系统.这对于用惯了git的我来说,将就了一段时间后,极为不爽,切换到git-svn勉强能用.随后,因为产品需要发布不同的版本,而git-svn对远程分支 ...
 - 小团队Git协作流程
		
git和svn 最大的差异在于git是分布式的管理方式而svn是集中式的管理方式. 集中式 集中式代码管理的核心是服务器,所有开发者在开始coding之前必须从服务器获取代码,然后开发,最后解决冲突, ...
 - 记一次小团队Git实践(中)
		
对于初学者,从使用上先入手,往往学的最快,并从中汲取教训,再回头更深入的学习,效果尤佳. 安装git 安装git自不必说,mac已经内置了git,linux下一个命令就能搞定,windows下需要下载 ...
 - Git 在团队中的最佳实践--如何正确使用Git Flow
		
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
 - 小团队git开发模式
		
实验室要使用Git进行代码管理,但是git非常复杂,各种开发模式也是层出不穷.作为新手的偶们很是发囧啊!!网上搜了一下,发现很多并不适合我们小团队运作(它本身就是为Linux内核管理而开发的分布式代码 ...
 
随机推荐
- [置顶] android AIDL 进程间通信
			
1.定义aidl文件 a.ITestService.aidl package com.open.aidl.service; import com.open.aidl.service.ITestServ ...
 - SICP 习题 (2.7) 解题总结 : 定义区间数据结构
			
SICP 习题 2.7 開始属于扩展练习,能够考虑不做,对后面的学习没什么影响.只是,假设上面的使用过程表示序对,还有丘奇计数你都能够理解的话,完毕这些扩展练习事实上没什么问题. 习题2.7是要求我们 ...
 - PHP学习笔记6-时间/日期
			
时区/时间/日期 输出unix时间戳(从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),用time() echo time();//unix时间戳 输出结果:143557475 ...
 - HDU 4121
			
http://www.bnuoj.com/v3/problem_show.php?pid=10277 //#pragma comment(linker, "/STACK:16777216&q ...
 - Ural 1068 - Sum
			
Your task is to find the sum of all integer numbers lying between 1 and N inclusive. Input The input ...
 - docker学习笔记:容器的网络设置
			
创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...
 - 安装Tomcat指定JDK(转)
			
一.应用实例 一般情况下一台服务器只跑一个业务,那么就直接配置一套环境,设置好Java环境变量即可.某些时候一台服务器上会安装多个业务,而且各个业务需要的JDK版本各不相同,或者为了使业务独立开来,需 ...
 - Acitivity创建与配置
			
•Activity的创建和配置 –Activity提供了和用户交互的可视化界面.创建一个Activity一般是继承Activity(当然也可以继承ListActivity.MapActivity等), ...
 - javascript每日一练(十)——运动二:缓冲运动
			
一.缓冲运动 实现原理:(目标距离-当前距离) / 基数 = 速度(运动距离越大速度越小,运动距离和速度成反比) (500 - oDiv.offsetLeft) / 7 = iSpeed; 需要注意: ...
 - 自定义类似QMutexLocker的CMutexLocker
			
最近做项目遇到一个需求,有一个buttonSlot()执行要耗点时间,为了防止用户无限制的乱点出现问题,考虑加一个互斥锁,使得每次执行完后才允许执行下一次.大概意思是: //QMutex m_mut ...