Git-01 简要介绍
1 git简介
2 版本控制是什么
3 常见的两种版本控制工具
3.1 集中式版本控制工具
3.2 分布式版本控制工具
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS) ,分为两种类型的仓库:
本地仓库和远程仓库
本地仓库:是在开发人员自己电脑上的Git仓库
远程仓库:是在远程服务器上的Git仓库
Clone:克隆,就是将远程仓库复制到本地
Push:推送,就是将本地仓库代码上传到远程仓库
Pull:拉取,就是将远程仓库代码下载到本地仓库
4 Git简史
Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统Git
5 Git的工作机制
Git分为工作区,暂存区,本地仓库,远程仓库
工作区就是我们操作的文件所在的文件夹
暂存区:临时存储区域
本地仓库:记录文件的所有历史信息(包括历史版本)
远程仓库:一个共同的仓库,各个本地仓库的文件可以推送到这里,本地仓库也可以从远程仓库拉取新的文件。
1.从远程仓库中克隆代码到本地仓库
2.从本地仓库中checkout代码然后进行代码修改
3.在提交前先将代码提交到暂存区
4.提交到本地仓库。本地仓库中保存修改的各个历史版本
5.修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
6 Git安装
6.1 下载
6.2 安装
(简单点的话可以一直next,采用默认的设置安装)
选择 Git 安装位置,要求是非中文并且没有空格的目录,然后下一步。
Git 安装目录名,不用修改,直接点击下一步
Git 的默认编辑器,建议使用默认的 Vim 编辑器,然后点击下一步
默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步
修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git
选择后台客户端连接协议,选默认值 OpenSSL,然后下一步
配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动
选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步
选择 Git pull 合并的模式,选择默认,然后下一步
选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步
其他配置,选择默认设置,然后下一步
点击 Finsh 按钮,Git 安装成功
右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端
在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功
7 Git 常用命令
7.1 设置用户签名
7.2 初始化本地库
执行成功,在文件夹下看到.git的文件夹生成(默认是隐藏的),勾选隐藏的项目,就可以看到,表示本地库已完成初始化
7.3 查看本地库状态
7.3.1 基本语法
可以看到,它这里显示,有一个文件aaa.txt没有add到暂存区(因为初始化完成后,我创建了一个aaa.txt的文件)
7.4 添加文件到暂存区
7.4.1 基本语法
git add 文件名
7.4.2 示例
执行git add aaa.txt把文件加到暂存区
执行git status查看本地库状态,发现有一个新的文件aaa.txt在暂存区
7.5 提交暂存区文件到本地库
7.5.1 基本语法
7.6 查看历史版本
git log 查看版本详细信息,顺序是从下到上的(最下面的是最早的操作,最上面的是最新的操作)
7.7 版本穿梭
此时bbb.txt只有一行内容"bbbbbb"
加上一行内容
执行git add和git commit把修改的内容提交到本地库
再查看bbb.txt的版本信息,可以看到修改的记录
执行git reset --gard 版本910739a ,这个910739a 就是上面bbb.txt的第一个版本
执行命令cat bbb.txt查看bbb.txt,发现内容只有一行了,退回到bbb.txt最初的版本
同时查看本地工作文件,发现bbb.txt也退回到最初版本
需要注意的是,版本穿梭,针对的是整个本地库,而不是某个文件,所有文件都会回到我们穿梭时候的那个版本的内容。
8 分支操作
8.1 什么是分支
如上图:master分支是主分支,同时它也是线上运行的正式版本。
现在,master-1正在线上运行,而此时我们需要添加两个功能模块,分别是feature-blue和feature-game。为了避免这两个模块的开发对线上运行的代码的影响,也为了避免两个功能模块开发之间的运行,所以创建两个分支,feature-blue和feature-game。此时,master-1、feature-blue-1和feature-game-1这三个分支的内容还是一样的。
同时两个开发团队分别去做feature-blue和feature-game这两个模块。
feature-blue团队在一段时间开发后完成了feature-blue-2版本,发现没有什么问题,就把feature-blue-2合并到master,master就更新到了master2,此时master2就有了feature-blue模块。
feature-game的团队,由于这个模块比较复杂,经过三个版本,一直到feature-game-4这个版本才完成整个模块的功能(在这个期间,master-2发现存在bug,修复了bug,变为了master-3这个版本)。feature-game-4这个版本经过测试,发现没什么问题,就把feature-game-4合并到master,形成了master4这个分支,此时master就具备了feature-game这个功能模块。
通过这个例子我们看到,分支可以有效的将各个功能模块的开发分开来,避免相互影响,同时,又不影响线上正在运行的主分支。在其它分支完成后,把新的内容合并到主分支就好了。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。
8.2 分支操作命令
8.3 创建分支
8.3.1 基本语法
8.4 查看分支
8.5 切换分支
8.6 合并分支
8.6.1 基本语法
2)把qqq提交到本地库
3)切换到master
4)合并baster1到master
发现,新创建的qqq.txt被合并过来了
8.6.3 冲突示例
2)切换到baster1
3)对qqq.txt进行修改
4)切换到master
5)合并baster1到master
MERGING状态代表有冲突,也指出了冲突问价是qqq.txt
6)处理冲突文件vim qqq.txt
我们保留两个分支的修改(也可以只保留某一个分支的修改),保存修改
7)添加qqq.txt到暂存区
8)提交qqq.txt
注意,git commit -m "备注说明" 后面不要文件名,冲突解决。
9)查看
查看qqq.txt,发现三行内容
切换到baster1,查看qqq.txt,两行内容
9 Git代码托管中心
git托管中心常用的有三个,GitLab,GitHub,Gitee
9.1 局域网环境下
GitLab服务器,它是在局域网环境下搭建的,私密性比较强
9.2 外网环境下
GitHub:国外的托管中心,网络影响较大
Gitee(码云),国内的托管中心
10 本地库和代码托管中心远程库交互
10.1 团队内协作
10.2 团队外协作
11 远程仓库操作
使用Github或者Gitee,两者的操作基本一致。
国内使用gitee会更舒服点,使用Git经常因为网络操作失败
11.1 网址
11.2 创建一个远程仓库(gitee)
11.3 远程仓库操作相关命令
11.4 在本地git添加远程库地址别名
11.4.1 基本语法
新增远程地址别名,别名为gittest
查看远程地址别名:发现有两个gittest别名,分别对应拉取和推送
11.5 推送代码到远程仓库
11.5.1 基本语法
操作后,发现本地仓库的文件已经推送到了远程仓库
11.6 演示团队协作-添加团队成员
11.6.1 创建一个新的gitee账号
11.6.2 把新的账号加入到我们的项目的团队中来
管理-仓库成员管理-开发者-邀请(可以发送链接要求,也可以直接通过对方用户名添加)
完成添加后,团队中就有两个账号了
11.7 clone代码
作为一个新的成员,要一期开发gittest这个项目,首先要把远程仓库的代码clone到本地仓库
11.7.1 基本语法
2)克隆远程仓库到本地仓库
git clone 远程地址,这里不能使用别名,只能用地址,这个地址使用新账号的远程仓库的地址
操作完成,发现远程仓库文件已经克隆到了本地仓库
11.8 使用新对本地仓库代码修改后push到远程仓库
11.8.1 由于我是在同一个电脑上操作的,所以先要修改凭证管理器
操作成功后我们修改的内容就被push到远程仓库了
11.9 pull拉取更新的内容
11.9.1 我们回到原先的本地仓库gittest
11.9.2 凭据管理器改为原来的账号
11.9.3 基本语法
git pull 远程仓库别名(地址) 分支名称
11.9.4 示例
发现1个文件发生了改变,就是aaa.txt,改变的内容被拉取下来了
使用cat查看,发现增加的一行内容已被拉取下来了
Git-01 简要介绍的更多相关文章
- 封装:简要介绍自定义开发基于WPF的MVC框架
原文:封装:简要介绍自定义开发基于WPF的MVC框架 一.目的:在使用Asp.net Core时,深感MVC框架作为页面跳转数据处理的方便,但WPF中似乎没有现成的MVC框架,由此自定义开发一套MVC ...
- 简要介绍BASE64、MD5、SHA、HMAC几种方法。
加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了. 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书. ...
- 《The Linux Command Line》 读书笔记01 基本命令介绍
<The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...
- [转]Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
转自:Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划 前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了Surfa ...
- [转] Android资源管理框架(Asset Manager)简要介绍和学习计划
转自:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分内容组成:代码和资源.资源主要就是指那些与U ...
- Activity启动过程简要介绍
无论是通过点击应用程序图标来启动Activity,还是通过Activity内部调用startActivity接口来启动新的Activity,都要借助于应用程序框架层的ActivityManagerSe ...
- Android应用程序的Activity启动过程简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6685853 在Android系统中,Activ ...
- Dalvik虚拟机简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8852432 我们知道,Android应用程序是 ...
- Android资源管理框架(Asset Manager)简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8738877 Android应用程序主要由两部分 ...
- Android应用程序组件Content Provider简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6946067 在Android系统中,Conte ...
随机推荐
- JUC学习笔记——共享模型之内存
JUC学习笔记--共享模型之内存 在本系列内容中我们会对JUC做一个系统的学习,本片将会介绍JUC的内存部分 我们会分为以下几部分进行介绍: Java内存模型 可见性 模式之两阶段终止 模式之Balk ...
- linux如何修改dns
#修改dns: [root@iZap201hv2fcgry1alvbznZ ~]# vim /etc/resolv.conf #添加此格式的dns nameserver 114.114.114.114 ...
- form enctype="multipart/form-data" ajax 文件上传
<form method="post" enctype="multipart/form-data" id="resource"> ...
- 【Linux】通过Crontab和shell脚本实现定期备份和删除PG数据库表数据
〇.参考资料 一.Crontab使用 1.查看状态 service crond status 2.新建crontab任务 crontab -e 输入字符串 * * * * * cd /home/big ...
- 【Java SE】Day06 类与对象、封装和构造方法
一.面向对象思想 1.概述:调用对象的行为实现功能,无需一步一步实现(从执行者变成指挥者) 2.类和对象 类是属性和行为的集合,可以看成描述事物的模板 对象是事物的具体体现,是类的一个实例,具备该类的 ...
- 【每日一题】【集合增删】2022年1月13日-NC41 最长无重复子数组-220113/220122
描述 给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同. 子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1 ...
- 【JUC】信号量Semaphore详解
欢迎关注专栏[JAVA并发] 欢迎关注个人公众号-- JAVA旭阳 前言 大家应该都用过synchronized 关键字加锁,用来保证某个时刻只允许一个线程运行.那么如果控制某个时刻允许指定数量的线程 ...
- 基于pyecharts的中医药知识图谱可视化
基于pyecharts的中医药知识图谱可视化 关键词: pyecharts:可视化:中医药知识图谱 摘要: 数据可视化是一种直观展示数据结果和变化情况的方法,可视化有助于知识发现与应用.Neo4j数据 ...
- json提取器和beanshell处理器组合,将提取的所有id以数组返回
1.添加json提取器 2.添加beanshell处理器,并编写脚本 String str1 = vars.get("buildid_ALL"); log.info(str1); ...
- Redis基本操作(2)
一.list类型 列表的元素类型为string 按照插⼊顺序排序 增加.修改 例1:在左侧插⼊数据 lpush key value1 value2 ... 例2:在右侧插⼊数据 rpush key v ...