Git教程Git多人协作开发
Git可以完成两件事情:
1. 版本控制
2.多人协作开发
如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发。
如果有多个开发人员共同开发一个项目,如何进行协作的呢。
Git提供了一个非常好的解决方案 ---- 多人协作开发。
1.多人协作原理
典型的做法是,首先创建一个git服务器,被多个人所操作。

1.多人协助实现
分为如下几个步骤:
1.创建一个git裸服务器 (git init --bare)
2.从裸服务器将版本库克隆至本地(git clone )
3.本地常规操作
4.推送版本至服务器 (git remote + git push origin master)
5.从远程服务器拉取版本(git pull)
一般而言,我们需要在Linux服务器上来搭建我们的git版本服务器,每个公司都会有。
由项目负责人开始。
我们现在是windows系统上模拟这个操作过程。
(1).创建一个git裸服务器 (git init --bare)
由负责人来完成的。服务器新建一个项目目录,如git-server

创建完毕,我们发现git-server内容和上次的不太一样。
上次使用git init 创建之后,会有一个隐藏的.git目录。目录中的才是现在看到的内容。
也就是说,现在根本就没有.git目录了。
这就意味着在这个目录中,不能做常规的开发。
(2).从裸服务器将版本库克隆至本地(git clone )
在git版本服务器,一般是不做任何开发工作的。如果要开发项目,就需要将版本库从服务器克隆到本地。
假设有一个程序员甲,开始自己的工作了。
使用命令 git clone git版本服务器地址
在windows下面,就是使用绝对路径,如下:

然后,甲就可以在这个目录下,进行常规开发。

我们可以在这个目录下,创建自己的工作区目录,完成常规开发。
(3).本地常规操作
甲可以,在本地进行常规开发。


这个过程,可以反复进行。


我的第一个模块(功能)开发完毕。需要将其推送到服务器。
(4).推送版本至服务器 (git remote + git push origin master)
当在本地完成一个模块(功能),需要推送到服务器,供其他同事使用。
第一件事情,需要知道服务器在哪儿?
git remote

第二件事情,直接推送即可
git push origin master
其中origin就是使用git remote得到的远程服务器的名称。
master表示是主分支。

对于甲来说,它的工作已经告一段落了,该轮到乙程序员出场了。
乙程序员,首先将版本库从git服务器上克隆到本地。

打开这个目录,然后进可以看到最新新的内容,如下:

对于乙而言,可以在本地进行常规开发。与此同时,甲继续他的常规开发。
模拟乙程序员在本地的开发。


将完成的工作,推送到git服务器。

回头,再看看甲的开发。



甲收工,准备下班了。在下班之前,需要将最新版本推送到git服务器。
开始使用命令,执行如下:

结果出错了,why?
之所以会出错,原因在于:其他程序员已经将最新的一个版本提交到git服务器上,但是你在提交之前,已经不是最新的。
在这种情况下,甲,需要先从服务器拉取最新的版本。
(5).从远程服务器拉取版本(git pull)
在多人协助开发时,每个开发人员在推送自己的最新版本时,都需要确保当前版本是最新的,所以就需要先获取最新版本,也就是说需要从服务器拉取最新版本到本地。
需要使用 git pull命令

如此一来,甲当前就是最新的版本。
然后再次使用 git push 命令推送至服务器。

接下来需要分两种情况:
如果有新的开发人员加入进来,重复2~5过程。
如果不是新的开发人员,重复3~5过程。
比如,对于乙而言,其实它现在已经不是最新的版本了,所以需要使用 git pull 拉取最新版本。

所以,对很多开发人员而言,一打开电脑,马上先git pull,拉取最新的。然后进行常规开发,
开发完毕之后,在git push之前,还需要使用git pull再拉取一遍。
如果还有一个新的程序员丙,加入了,怎么办呢?
需要先git clone

然后就进行常规开发,推送版本、拉取版本。
在整个协作开发时,有时候会出现冲突。通常都是由于开发人员分工不明确导致的,所以如果出现这种情况,需要两个程序员协商解决。
3.分支
(1).什么是分支
在前面所有的操作当中,我们一直使用的是master主分支。以刚才的项目版本控制为例

有四个版本,在我们的版本库中,都是存在于master主分支上的。
图示如下:

如果我们的项目本身比较简单,只需要有主分支master就够了。
但是,实际上并不是这样的。
在这个世界上,有一种软件叫做开源软件 -- 源代码开发,所有的人都可以免费使用。
开源软件是由世界上无数的程序员共同来开发。
每个程序员都可以创建一个自己的分支,这个自己分支和主master完全独立的两个分支。

相应的,每个程序员都可以拥有自己的分支,可以进行任何的开发,此时和master没有什么关系的。
一旦开发完毕,就可以将你的分支合并到主分支上去。
什么时候会用到分支呢?
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险,怎么办?
你可以创建一个属于自己的分支,别人看不见,还继续在原来的分支上工作,而你在自己的分支上进行开发,等开发完毕,合并即可。
在开源世界中,需用大量的程序员共同维护一个项目。也是需要使用分支,如Jquery。
(2).分支的基本操作
基本操作有如下几个:
1. 查看当前分支 (git branch)
2. 创建分支 (git branch 分支名)
3.切换分支(git checkout 分支名)
4.分支上的常规操作
5.分支的合并 (git checkout master + git merge 分支名)
6.分支的删除(git branch -d 分支名)
查看当前分支 (git branch)

其中的 * 表示 当前分支。
默认情况下,只有一个master主分支。
创建分支 (git branch 分支名)

切换分支(git checkout 分支名)
创建完成之后,就有了一个新的分支,但是并没有立即切换到新的分支,需要使用命令切换一下。

分支上的常规操作
已经切换到b1分支上,就可以在b1分支进行常规开发和操作。

使用git add 和git commit提交。
使用git log查看即可:

与之对应的,我们再次切换到master分支上看看是什么情况:

说明在master分支上,并没有新提交的内容。
分支的合并 (git checkout master + git merge 分支名)
分支的合并,一定是在 主分支上进行的。
只能在主分支合并其它分支。
需要两步:
1) 切换到主分支
2) 使用git merge 分支名 进行合并


再次查看master的一个log情况,如下:

分支的删除(git branch -d 分支名)
使用命令git branch -d 分支名

如果你发现你的分支中所做的开发没有任何用处,也可以不合并直接删除。
(3).分支的原理
分支的过程及原理如下:
默认只有master的情况下,master总是指向最新的版本,而HEAD指针总是指向master的。

现在,我创建了一个新的分支dev,将当前分支指定为dev,此时,master和dev都指向当前最新版本,但是HEAD指针已经指向了dev分支。

接下来,我们提交了新的版本,dev指向最新版本,而master则原地不动。
HEAD指向当前分支dev的。

当在dev分支上完成开发之后,可以将它合并到主分支master上。
合并时,需要先切换到master,意味着HEAD指向了master,合并的时候其实就是将master和dev的最新版本同步。

dev分支的使命已经完成,没有什么作用了,将其删除掉。只剩下一个主分支。

转:http://www.cnblogs.com/Josiah-Lin/p/6847973.html
Git教程Git多人协作开发的更多相关文章
- Git详细教程(2)---多人协作开发
Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...
- Git教程之多人协作
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin.要查看远程库的信息,用git remote:
- Git详细教程---多人协作开发
Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...
- 记录git多人协作开发常用的流程,供新手参考
声明:博主写的博客都是经过自己总结或者亲测成功的实例,绝不乱转载.读者可放心看,有不足之处请私信我,或者给我发邮件:pangchao620@163.com. 写作目的: 记录一下我看完廖学锋老师的gi ...
- 利用git 进行多人协作开发
现在,大部分项目都是用 git 来管理代码的,但当项目变大.多人协作时,git 的使用就变得复杂了,这时就需要在 git 使用的流程上来思考如何更优的使用 git. 对于大部分 web 项目而言,并不 ...
- Git 多人协作开发的过程
Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...
- git 分支管理——多人协作
git 分支管理--多人协作 一般一个项目有一个master主分支,还有一个develop开发分支.主要是在develop分支上协作开发,然后merge合并到master主分支上. 当从远程仓库克隆时 ...
- Unity3D多人协作开发环境搭建
多人协作 说到多人协作开发,大家都会想到要使用版本控制工具来管理项目,当然最常用的要数SVN和Git了,但是SVN管理Unity3D项目的确有一些不尽人意的地方. 比如:两个人修改了同一个场景,SVN ...
- GitHub 多人协作开发 三种方式:
GitHub 多人协作开发 三种方式: 一.Fork 方式 网上介绍比较多的方式(比较大型的开源项目,比如cocos2d-x) 开发者 fork 自己生成一个独立的分支,跟主分支完全独立,pull代码 ...
随机推荐
- 如何监控执行的SQL语句?
环境: SQL Server 2012. 打开SQL Server Profiler. 在菜单中选择New Trace, 连接上SQL Server. 在弹出的窗口中选择Event selection ...
- Matlab实现:图像边缘提取
1. 边缘提取算法 方法一:一阶微分算子 Sobel算子 Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素. Roberts算子 ...
- (剑指Offer)面试题3:二维数组中的查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 鉴于数组的规律 ...
- 翻译记忆软件-塔多思TRADOS经典教程_1
窗体顶端 网络上关于TRADOS使用的文章很多,但大多数内容涉及的内容都过于广泛,刚准备上手的同行们看了总会觉得不知所云,无从下手.笔者自己也在自学阶段遇到不少麻烦.经过长期的使用和琢磨,终于写了短文 ...
- GET 和 POST的区别
1.最普遍的答案 GET使用URL或Cookie传参.而POST将数据放在BODY中. GET的URL会有长度上的限制,则POST的数据则可以非常大. POST比GET安全,因为数据在地址栏上不可见. ...
- c#实现验证码功能(多种模式下分别实现验证功能)详细,带注释
网上找了很多验证相关的代码,发现有很多瑕疵.现在本人整理测试了一个实现验证码功能的代码,里面有纯数字,纯英文,英文和数字混合等三种模式.并且在必要地方都已经备有注释,希望可以帮到那些需要的人. 验证码 ...
- PL/SQL之DBMS_SQL程序包使用(1)(学习笔记)
dbms_sql程序包dbms_sql程序包是系统提供给我们的另一种使用动态SQL的方法:使用DBMS_SQL包实现动态的SQL的步骤如下:1.将要执行的SQL语句或者一个语句放到一个字符串变量中2. ...
- 改动Apach默认port
一.改动Apache的默认port号 在WEB SERVER界,无论是微软的IIS还是世界排名第一的Apache,它们安装好后默认的网页服务port号都是80.有必要指出的是,假设你的电脑中已经安装有 ...
- 【Docker】常用命令
1.查看正在运行的容器 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND ...
- 如何让history命令显示最近所执行过的命令的具体执行时间
如何让history命令显示最近所执行过的命令的具体执行时间. 步骤如下: 1.以ROOT用户编辑/etc/profile文件,在里面加入下面内容(我一般习惯在最末尾加): export HISTTI ...