Git详细教程(2)---多人协作开发

时间:2022-10-12 13:20:20

Git可以完成两件事情:

1. 版本控制

2.多人协作开发

如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发。

如果有多个开发人员共同开发一个项目,如何进行协作的呢。

Git提供了一个非常好的解决方案 ---- 多人协作开发。

1.多人协作原理

典型的做法是,首先创建一个git服务器,被多个人所操作。

Git详细教程(2)---多人协作开发

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详细教程(2)---多人协作开发

创建完毕,我们发现git-server内容和上次的不太一样。

上次使用git init 创建之后,会有一个隐藏的.git目录。目录中的才是现在看到的内容。

也就是说,现在根本就没有.git目录了。

这就意味着在这个目录中,不能做常规的开发。

(2).从裸服务器将版本库克隆至本地(git clone )

在git版本服务器,一般是不做任何开发工作的。如果要开发项目,就需要将版本库从服务器克隆到本地。

假设有一个程序员甲,开始自己的工作了。

使用命令 git clone git版本服务器地址

在windows下面,就是使用绝对路径,如下:

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

我们可以在这个目录下,创建自己的工作区目录,完成常规开发。

(3).本地常规操作

甲可以,在本地进行常规开发。

Git详细教程(2)---多人协作开发

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

Git详细教程(2)---多人协作开发

我的第一个模块(功能)开发完毕。需要将其推送到服务器。

(4).推送版本至服务器 (git remote +  git push origin master)

当在本地完成一个模块(功能),需要推送到服务器,供其他同事使用。

第一件事情,需要知道服务器在哪儿?

git remote

Git详细教程(2)---多人协作开发

第二件事情,直接推送即可

git push origin master

其中origin就是使用git remote得到的远程服务器的名称。

master表示是主分支。

Git详细教程(2)---多人协作开发

对于甲来说,它的工作已经告一段落了,该轮到乙程序员出场了。

乙程序员,首先将版本库从git服务器上克隆到本地。

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

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

模拟乙程序员在本地的开发。

Git详细教程(2)---多人协作开发

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

回头,再看看甲的开发。

Git详细教程(2)---多人协作开发

Git详细教程(2)---多人协作开发

Git详细教程(2)---多人协作开发

甲收工,准备下班了。在下班之前,需要将最新版本推送到git服务器。

开始使用命令,执行如下:

Git详细教程(2)---多人协作开发

结果出错了,why?

之所以会出错,原因在于:其他程序员已经将最新的一个版本提交到git服务器上,但是你在提交之前,已经不是最新的。

在这种情况下,甲,需要先从服务器拉取最新的版本。

(5).从远程服务器拉取版本(git pull)

在多人协助开发时,每个开发人员在推送自己的最新版本时,都需要确保当前版本是最新的,所以就需要先获取最新版本,也就是说需要从服务器拉取最新版本到本地。

需要使用 git pull命令

Git详细教程(2)---多人协作开发

如此一来,甲当前就是最新的版本。

然后再次使用 git push 命令推送至服务器。

Git详细教程(2)---多人协作开发

接下来需要分两种情况:

如果有新的开发人员加入进来,重复2~5过程。

如果不是新的开发人员,重复3~5过程。

比如,对于乙而言,其实它现在已经不是最新的版本了,所以需要使用 git pull 拉取最新版本。

Git详细教程(2)---多人协作开发

所以,对很多开发人员而言,一打开电脑,马上先git pull,拉取最新的。然后进行常规开发,

开发完毕之后,在git push之前,还需要使用git pull再拉取一遍。

如果还有一个新的程序员丙,加入了,怎么办呢?

需要先git clone

Git详细教程(2)---多人协作开发

然后就进行常规开发,推送版本、拉取版本。

在整个协作开发时,有时候会出现冲突。通常都是由于开发人员分工不明确导致的,所以如果出现这种情况,需要两个程序员协商解决。

3.分支

(1).什么是分支

在前面所有的操作当中,我们一直使用的是master主分支。以刚才的项目版本控制为例

Git详细教程(2)---多人协作开发

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

图示如下:

Git详细教程(2)---多人协作开发

如果我们的项目本身比较简单,只需要有主分支master就够了。

但是,实际上并不是这样的。

在这个世界上,有一种软件叫做开源软件 -- 源代码开发,所有的人都可以免费使用。

开源软件是由世界上无数的程序员共同来开发。

每个程序员都可以创建一个自己的分支,这个自己分支和主master完全独立的两个分支。

Git详细教程(2)---多人协作开发

相应的,每个程序员都可以拥有自己的分支,可以进行任何的开发,此时和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)

Git详细教程(2)---多人协作开发

其中的 * 表示 当前分支。

默认情况下,只有一个master主分支。

创建分支 (git branch 分支名)

Git详细教程(2)---多人协作开发

切换分支(git checkout 分支名)

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

Git详细教程(2)---多人协作开发

分支上的常规操作

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

Git详细教程(2)---多人协作开发

使用git add 和git commit提交。

使用git log查看即可:

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

说明在master分支上,并没有新提交的内容。

分支的合并 (git checkout master + git merge 分支名)

分支的合并,一定是在 主分支上进行的。

只能在主分支合并其它分支。

需要两步:

1) 切换到主分支

2) 使用git merge 分支名 进行合并

Git详细教程(2)---多人协作开发

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

分支的删除(git branch -d 分支名)

使用命令git branch -d 分支名

Git详细教程(2)---多人协作开发

如果你发现你的分支中所做的开发没有任何用处,也可以不合并直接删除。

(3).分支的原理

分支的过程及原理如下:

默认只有master的情况下,master总是指向最新的版本,而HEAD指针总是指向master的。

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

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

HEAD指向当前分支dev的。

Git详细教程(2)---多人协作开发

当在dev分支上完成开发之后,可以将它合并到主分支master上。

合并时,需要先切换到master,意味着HEAD指向了master,合并的时候其实就是将master和dev的最新版本同步。

Git详细教程(2)---多人协作开发

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

Git详细教程(2)---多人协作开发

Git详细教程(2)---多人协作开发的更多相关文章

  1. git 如何实现进行多人协作开发(远程仓库)

    第一.Git作为分布式的版本控制系统,你是你本地仓库的主人,但是想要实现多人的协作开发,你就要将你本地的开发推送到远程共享仓库*大家下载,本篇主要以github作为远程服务器来介绍有关远程仓库这块内 ...

  2. Git 基础教程 之 多人协作

           多人协作时,从远程克隆时,默认情况下,只能看到master分支 git checkout -b dev origin/dev 创建远程origin的dev分支到本地 git branch ...

  3. 如何利用 Git 与 GitHub 进行多人协作开发

    方法一:添加 Collaborators Collaborators 类似于Team模式. Repository的拥有者Owner 可以直接添加合作者到自己的仓库中, 让合作者拥有几乎等同拥有者的权限 ...

  4. Git详细教程---多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  5. Git教程Git多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  6. 利用git 进行多人协作开发

    现在,大部分项目都是用 git 来管理代码的,但当项目变大.多人协作时,git 的使用就变得复杂了,这时就需要在 git 使用的流程上来思考如何更优的使用 git. 对于大部分 web 项目而言,并不 ...

  7. Git 多人协作开发的过程

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  8. git详细教程

    Table of Contents 1 Git详细教程 1.1 Git简介 1.1.1 Git是何方神圣? 1.1.2 重要的术语 1.1.3 索引 1.2 Git安装 1.3 Git配置 1.3.1 ...

  9. GitHub 多人协作开发 三种方式:

    GitHub 多人协作开发 三种方式: 一.Fork 方式 网上介绍比较多的方式(比较大型的开源项目,比如cocos2d-x) 开发者 fork 自己生成一个独立的分支,跟主分支完全独立,pull代码 ...

随机推荐

  1. Javascript 执行环境及作用域

    执行环境是javascript中最为重要的一个概念. 执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为. 每个执行环境都有一个与之关联的变量对象(variable object),环境 ...

  2. C#简易播放器(基于开源VLC)

    可见光通信技术(Visible Light Communication,VLC)是指利用可见光波段的光作为信息载体,不使用光纤等有线信道的传输介质,而在空气中直接传输光信号的通信方式.LED可见光通信 ...

  3. WordPress Backdoor未授权访问漏洞和信息泄露漏洞

    漏洞名称: WordPress Backdoor未授权访问漏洞和信息泄露漏洞 CNNVD编号: CNNVD-201312-497 发布时间: 2013-12-27 更新时间: 2013-12-27 危 ...

  4. python中的闭包和装饰器

    重新学习完了函数,是时候将其中的一些重点重新捋一捋了,本次总结的东西只有闭包和装饰器 1.闭包 闭包是python函数中的一个比较重要功能,一般闭包都是用在装饰器上,一般学完闭包就会去学习装饰器,这俩 ...

  5. 小甲鱼python基础教程飞机大战源码及素材

    百度了半天小甲鱼python飞机大战的源码和素材,搜出一堆不知道是什么玩意儿的玩意儿. 最终还是自己对着视频一行行代码敲出来. 需要的同学点下面的链接自取. 下载

  6. windows安装centos7子系统

    Windows的Linux子系统(wsl ) 自从有了wsl后,基本上虚拟机都省了,对于离不开Windows的便捷,Linux对开发的友好的人来说,真是一大利器.可惜默认的系统没有centos,幸运的 ...

  7. Tomcat性能调优后, 启动出现警告问题 [did not find a matching property.]

    http://blog.csdn.net/dracotianlong/article/details/8963594 Tomcat性能调优后, 启动出现警告问题 [did not find a mat ...

  8. HTML5 桌面提示

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. &lbrack;android错误&rsqb; Failed to install &ast;&period;apk on device &&num;39&semi;emulator-5554&&num;39&semi;&colon; timeout

    [2014-06-26 15:35:42 - app] ------------------------------ [2014-06-26 15:35:42 - app] Android Launc ...

  10. TeleMCU视频会议系统添加字幕支持

    本文原创自 http://blog.csdn.net/voipmaker  转载注明出处. 最新版本号TeleMCU添加了字幕支持,与会者能够看到其它人的名字,做法是在与会者的视频上overlay 文 ...