当前课程知识点:软件工程 >  第6章 敏捷开发与配置管理 >  6.5 配置管理工具Git >  讲课视频

返回《软件工程》慕课在线视频课程列表

讲课视频在线视频

下一节:讲课视频

返回《软件工程》慕课在线视频列表

讲课视频课程教案、知识点、字幕

同学们好

这节课我们一起来学习

软件配置管理工具Git的相关内容

我们知道版本控制

对于大中型软件系统的开发

非常的重要

Linux在1991年的时候

被创造出来

吸引了来自世界的很多志愿者

参与它的代码编写

但人多手杂

不可避免地代码的管理

也变得非常的困难

由于种种原因

CVS SVN之类的

集中式版本控制系统没有被采用

商用免费授权给它们用的

也由于一些版权原因

被收回授权了

于是Linux它的作者花了两周时间

自己用C写了个

分布式的版本控制系统

聪明的你一定已经知道了

这就是Git

很快Git已经成为最流行的

分布式版本控制系统之一了

其实Git这个词

在英文里是饭桶的意思

牛人 总有一些自嘲的幽默感

那对于Git来说

最关键最关键的

就是它分布式的特点

这节课我们就将细细体会

如果你喜欢自学的话

也可以打开屏幕上的自学链接

一步一步跟着做 学起来也很快

了解一个新玩意

我们首先要了解一些基本的概念

对于Git来说

它作为版本控制系统

控制单位就是版本库

而它作为分布式的版本控制系统

这就有远端版本库和本地版本库

远端版本库可以认为

是在非本机上的

比如 我们可以放在服务器上

或者放在第三方托管主机上

而本地版本库

就是在你的电脑上的

如果你有很多合作的小伙伴

每个人

都可以有自己的本地版本库

接下来我们主要要解决的问题

就是如何在分布式这个大前提下

做到版本库之间的同步操作

在此之前

我们先了解一下Git的版本库

是如何创建的

以及如何向它提交变更

我们需要使用Git的命令行

它在Unix系列比较新的操作系统

一般都自带了

如果没有

各个操作系统

都有方便的安装途径

假设我们现在已经安装好

Git命令行了

首先 我们要在希望创建版本库的

地方打开命令行

创建一个空的文件夹

进入这个空的文件夹之后

用git init

就可以把这个空的文件夹

变成一个空的版本库

其实说白了 所谓版本库

在你的本机磁盘看来

它就是一个

有着特殊结构的文件夹

假设我们在这个版本库的

文件夹里面前

创建了一个文件

那么我们通过git status

这条命令

它就会列出当前版本库中

尚未提交的文件改动

那这些改动

我们就称为未跟踪的文件

比如我们就会发现

file.txt这个文件

还没有被跟踪

那接着我们就通过

git add file.txt这条命令

那它就可以把这个文件

给标记一下

它就被git版本库获知了

或者说它已经被跟踪了

我们的版本库就知道

这个文件是需要提交的

那接着我们通过

git commit命令带上-m参数

写上一条提交的消息

那这样就会把版本库中

已经被跟踪的所有文件

一同提交到版本库中

那这样就叫做完成了一次提交

这些文件的改动

就都被版本库记录下来了

比如假设我们又创建两个新文件

那继续用git status

就能同样发现这两个文件

尚未被跟踪

然后继续可以用git add命令

加上文件的通配符

来一次性把它们都跟踪

当然我们也可以分为两条

add命令来跟踪

那最后同样可以用git commit

带上提交的消息来完成提交

那这样

我们就已经进行了两次提交了

我们的版本库中

就有了三个新的文件

刚刚说的版本库

是在我们本机创建的

如果同样的方式

在服务器上创建一个git版本库

这就成为了远端版本库

为了更好进行协作

我们经常采用一个远端版本库

以及若干个分布在不同机器上的

本地版本库这样的模式

任何本地版本库有提交

都把提交同步到远端版本库去

这样所有的本地版本库

就可以进行同步

很多时候

我们是先创建好远端版本库的

这样我们就需要把它克隆到本地

通过git clone

带上版本库的地址

就可以完成远端版本库

到本地版本库的克隆

这边版本库的地址

如果在Github上一般是

[email protected]

冒号 用户名/版本库名

这样格式

其实如果你熟悉的话

会发现这其实是一个

ssh格式的URL

当然Git它的兼容性很好

也可以用其它格式的版本库地址

比如说Github

它也提供了https格式的

版本库地址

我们现在已经把远端版本库

在本地的若干台机器上

完成了克隆

那接下来要介绍的是

如何把文件的变动

从远端版本库同步到本地版本库

这种操作叫做从远端版本库

拉取comit到本地

具体地使用命令很简单

就是git pull

比如说我们远端版本库上

最新的提交

它把file4.txt

这个文件进行了变动

那我们在本地版本库

就只需要运行一下git pull

它就会自动地从远端拉取commiit

这样变动的文件就同步到本地了

那对于另一个本地版本库

也是一样的

运行这条命令后

就可以把变动的文件同步到本地

我们刚刚知道了

怎么把变动从远端同步到本地

那远端版本库的变动是怎么来的

我们当然不会在远端版本库上

去改动文件然后提交

其实我们可以在本地版本库

进行文件的变动

然后我们把这些变动

提交到本地版本库去

最后再把本地版本库

同步到远端去就可以了

而我们要把本地版本库

同步到远端

就需要通过git push这条命令

它就会自动地把远端版本库上

还没有的文件变动

从本地同步过去

那这边有一个需要注意的点

就是git push命令

它要求你的本地版本库

已经拥有了远端版本库的

所有commit

所以我们一般会先git pull

然后再进行文件变动

并提交后再git push

我们对file4.txt进行了改动

然后让版本库标记

这个文件的改动是已经跟踪了

那接下来

如果我们想撤销这一改动

可以通过git reset命令来实现

这样它只会把file4.txt的改动

恢复成未跟踪的状态

而它的改动是仍然存在的

而如果我们想彻底

抛弃这个文件改动

让它恢复成上次commit时候的样子

就可以通过git checkout

并指定这个文件

大家在用的时候一定要小心

因为这条命令它会丢失file4

自从上次commit之后的所有改动

比较危险

因为它会丢失你对文件的修改

除非你真的想这么做

否则慎用

我们对一些文件进行了改动

然后想提交的话

可以用git commit带上-a

来自动地把修改的文件先add

再进行commit

带上提交消息的做法

和之前一样就是用-m的参数

这样我们就让版本库中

增加一次新的commit

提交的消息为msg4

接着 我们再把它push到远端之前

突然间灵光一闪

想到有个地方忘了修改了

于是我们打开file4来进行改动

那接着就要把这个改动的标记

为已跟踪

然后我们可以增加一次

新的commit

或者其实

我们也可以直接把它加到

上一次commit去

比如刚刚提交的这个msg4

具体做法就是直接git commit

带上--amend

这样的参数就可以了

这样file4里就要会提交到

上一次的commit去

说了这么多git版本库的操作

其实版本库里面

还有个很重要的概念 就是分支

我们前面也是在同一个分支

去进行文件的变动和提交

一般这个(09:05)的分支

叫做master

我们在远端版本库和本地版本库

都存在这个分支

它们之间可以互相同步

为了部署的需要

我们也常常会在远端版本库

创建一个release分支

保持这个分支

随时都是可部署的状态

这样部署服务器上

始终从这个分支去同步文件

就OK了

除此之外

我们可以通过Git的命令行

很方便地创建新的分支

比如

我们按星期进行开发的迭代

第一周的迭代

可以创建一个week1分支

通过git checkout-b

带上新分支的名称就行了

这样就会创建一个

名为week1的分支

同时当前的工作分支

也自动切换到这个新分支去了

于是 我们在第一周迭代中

新增加的功能

都可以在这个新分支上去开发

而如果在第一周迭代的过程中

发现已经发布的系统

存在致命的bug

就可以很方便地切换回

master分支进行bug的修复

这样就相当于给我们的开发

开了一个支线

当然这个支线开发完成之后

再把它合并回主线就行了

不仅不会影响新功能的开发

也不会耽误现有系统bug的修复

那么我们刚刚创建的week1分支

如果我们在这个分支上

进行一些新的提交

就可以把这个分支

同步到远端版本库去

而如果远端版本库

不存在这个分支

就通过给git push的命令

增加-u的参数就行了

带上origin和新分支的名称

接下来介绍分支的合并操作

举个例子

我们首先切换到week1分支

然后我们进行了文件的改动

并提交

这样file4就在week1分支的

最新提交中被改动了

那我们想把week1分支的

最新的提交合并到master分支去

就要切换到master分支

然后通过git merge

带上另一个分支的名称

就可以把那个分支

合并到当前的工作分支

这样我们刚才在week1分支

对file4的改动

就被合并到master分支去了

合并的时候还有一种特殊的情况

就是可能会出现冲突

比如我们在master的分支上

file4它有一些week1分支上

没有的改动

而且它们的改动出现了冲突

比如说

它们改动了文件的同一个位置

这样在merge之后

git的工具就会提示我们

file4发生了冲突

这样file4它的其中部分内容

就会像屏幕上打出来的这样

它就标明了其中的部分

哪些来自当前的分支

哪些来自week1的分支

我们就需要手工

将它们合并为期望的结果

那完成之后保存

然后通过git add

就可以让版本库知道

这个冲突已经解决了

接着就是

常规的git commit来提交

我们已经对week1这个分支

完成了开发工作

并且已经把它

合并到了主分支去了

那接下来

我们就可以把这个分支删掉

方法很简单

首先要确认当前的工作分支

不是要删除的分支

我们要删除week1

那就要先切换到另一个分支

比如说主分支

然后我们通过git branch-d参数

带上要删除的分支的名称就行了

这样分支在本地就被删除了

我们也可以把删除分支这个操作

同步到远端版本库去

通过git push origin带上--delete

和分支的名称就行了

我们说了这么多的git命令

一时半会可能很难记住

其实git的学习也没有那么麻烦

比如我们可以借助一些

带图形界面的git管理工具的力量

SourceTree就是一款

挺方便好用的免费Git管理软件

它提供了Windows和OS X

两个操作系统的版本

大家如果感兴趣的话

可以自行下载使用

接下来我们来聊一聊

使用Git进行代码托管开发的实践

这边我们介绍一种

git协作开发的方式

在远端版本库上

有master分支作为开发的主分支

还有release分支

作为部署用的分支

在程序员的本地版本库中

有master分支

当他要开发一个新功能的时候

就会在本地的版本库中

创建一个新的分支

比如说feature1

当它完成新功能的开发之后

就会把新的这个分支

合并到主分支去

并把它同步到远端

而对于任意一个

程序员的本地版本库

也是这么做的

这样就可以保证

master分支始终都是可运行

可测试的版本

而不会是某个功能

只完成一半的半成品

具体来说

我们的远端版本库上

有master分支

和一个起始的commit

在两个程序员的本地版本库中

都已经同步了主分支的最新提交

两位程序员进行了分工

要开发不同的功能

他们分别创建了

新功能的本地分支

第一个程序员

他在feature1分支上

进行了一些开发

有了一些提交

而第二个程序员

则在feature2分支上

有了一些提交

接着他们在主分支上发现了bug

于是第二个程序员

切换回主分支去

对bug进行了修复

并立刻同步到了远端版本库去

而第一个程序员

则继续把feature1给完成了

然后这个时候

他会发现主分支有新的提交

所以他首先要从远端

把新的提交拉取到本地

接着他把主分支的最新提交

和featur1的最新提交

合并在主分支上

并把这些提交都同步到远端去

于是 远端就在没有创建

feature1分支的情况下

得到了feature1分支的所有提交

接着feature2分支

也有了一些新的动作

然后第一个程序员

又在主分支上解决了一个bug

他进行了一次新提交

并且推送到了远端

这个时候第二个程序员

已经完成了对feature2的开发

他想把成果合并到主分支去

那他也要先从远端

拉取最新的master分支

然后 再进行合并

最后他再把合并后的结果

同步到远端去

这样

远端就又得到了

feature2的所有提交

当然第一个程序员的本地版本库

也可以从远端

拉取最新的master分支

就这样继续下去

这个版本库

它就可以井井有条地

进行开发工作

而且保证了主分支

始终都是可运行

可测试的版本

如果你想对git的命令

有更详细的了解

可以查阅GitBook

而SoureTree这款软件的官方

也提供了一些关于使用的说明

大家可以去查阅

这节课就到这里 谢谢大家

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。