git的安装流程本文不谈,博客论坛上有很多详细的流程介绍(需要自行搜索即可)
Git
是什么
-
Git是目前世界上最先进的分布式版本控制系统(没有之一)
Git
版本控制系统是
一个分布式的系统,是用来保存工程源代码历史状态(游戏存档)的命令行
工具 -
Git是一个命令行(小黑窗)工具,用于版本控制(存档器)
-
Git有什么特点?简单来说就是:高端大气上档次!
Git应用场景介绍
-
多人开发
代码管理
目前我们多人代码的时候,想把代码合并一起是利用最原始的复制粘贴操作。有了git之后,可以一键搞
-
异地开发
代码管理
实际开发中,我们上班可能会用公司电脑敲代码。有时候回到家里用自己电脑偷偷加个班,以前的做法是备一个U盘,复制粘贴。有了git之后,直接一键搞定。
-
版本管理
比如我现在公司网站已经做出来了1.0版本在使用,现在计划增加一些新功能,但是这个功能不稳定需要经过开发和测试环节,为了不影响现有的稳定版本。以前的做法是把稳定版本单独拷贝一份增加功能,等做好之后再把以前版本给替换掉。有了git之后可以一键搞定。 -
版本回滚
: 比如这周产品经理提出一个功能,我辛辛苦苦写了一周代码。 到了下周,产品经理说这个功能不做了,叫我删掉改成其他功能。 我们把代码删掉之后按照产品经理要求又辛辛苦苦写了一周代码。到了下下周,产品经理说这个功能还是没有上次那个好,还是改成上周的吧…………
Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?
先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。
CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用。由于CVS自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。同样是开源而且免费的SVN修正了CVS的一些稳定性问题,是目前用得最多的集中式版本库控制系统。
除了免费的外,还有收费的集中式版本控制系统,比如IBM的ClearCase(以前是Rational公司的,被IBM收购了),特点是安装比Windows还大,运行比蜗牛还慢,能用ClearCase的一般是世界500强,他们有个共同的特点是财大气粗,或者人傻钱多。
微软自己也有一个集中式版本控制系统叫VSS,集成在Visual Studio中。由于其反人类的设计,连微软自己都不好意思用了。
分布式版本控制系统除了Git以及促使Git诞生的BitKeeper外,还有类似Git的Mercurial和Bazaar等。这些分布式版本控制系统各有特点,但最快、最简单也最流行的依然是Git!
-----引用廖雪峰的集中式与分布式(向大佬致敬)
Git安装流程
目标
掌握安装流程
下载
安装
全程默认点击即可,不用修改其他选项 (建议:不要安装在C盘之外的位置)
检测是否安装成功
如果在电脑任意文件夹中点击右键,能够出现Git命令选项,则说明安装成功
mac系统
1.首先使用自带的终端,输入 : git --version , 然后回车如果看到版本号。说明已经安装
2.如果没有看到版本号,可以在终端输入: brew install git , 然后回车等待安装。 安装成功之后重复步骤1,检查是否安装成功
03配置用户信息
目标
掌握配置用户信息的方式
为啥要配置
安装完git这个软件之后,要做的第一件事情就是设置自己的 用户名
和 邮件地址
,这样我们就可以知道哪些人提交了什么代码。
配置用户信息命令
###
git config --global user.email "你的码云账号邮箱" git config --global user.name "你的码云用户名(可以随便写)"
注意:
-
通过 git config --global user.name 和 git config --global user.email 配置的用户名和邮箱地址,会被写入到 C:/Users/用户名文件夹/.gitconfig 文件中。这个文件是 Git 的全局配置文件,配置一次即可永久生效。
-
上面的邮箱和用户名可以不是真实的,也可以后面自行修改
查看所有的全局配置
git config --list --global :::info 查看所有的全局配置 git config --list --global 查看指定的全局配置项 git config user.name git config user.email :::
04使用git的基本工作过程
目标
掌握git的基本工作流程
9个常见操作
程序员比较高频的操作有9个。具体如下。
-
1.新建项目文件夹(只做一次)
-
2.进入文件夹 (重要)
-
3.初始化仓库:git init
(只做一次) -
4.编码
-
5.添加文件信息: git add .
-
6.确认添加信息:git commit -m"描述信息"
-
7.查看详细日志信息:git log
-
8.查看简略日志信息:git log --oneline
-
9.版本回滚:git reset --hard 版本号
第123步一个项目只需要一次,456步频繁使用,789步偶尔会用
1.新建文件夹
如果是老项目(已经存在的项目),这步可以省略了。
2.启动进入git命令
进入这个文件夹, 点击右键选择Git Bash Here
打开git命令行工具
(小蓝窗)
3. 初始化项目
在小蓝窗输入 git init
注意:
-
如果是老项目,这一步就省略了。
-
.git目录可能是隐藏的,需要设置为可见才能看到
4. 编码(程序员的日常工作)
在这个目录下正常做开发:创建文件,修改文件内容.... 例如: 添加 index.txt,并写入一些内容(任意内容均可)
5. 添加存档
命令: git add .
注意:这个命令只是将文件信息添加到暂存区,还没有真正存档,需要使用git commit命令确认存档才可以
6. 确认存档
###
命令 git commit -m "说明"
图示
以上流程是实际开发中主要使用流程
小结
git add . git commit -m "操作内容"
05git的三个区
目标
理解git三个区的作用,掌握git add commit的用法
三个区
-
工作区: 处理工作的区域
-
暂存区: 临时存放的区域
-
本地git仓库: 最终的存放区域
对比理解
生活
文件夹
-
工作区: 在你电脑里看到的目录
-
暂存区: 在.git文件夹内的index中 (二进制记录)
-
版本库: 指的整个.git文件夹 (也认为是本地仓库)
在代码中的体现
三个区与git命令
06查看提交信息
目标
掌握常见的查看提交信息的命令
查看提交记录
如下两个命令用来查看提交记录
-
git log
-
git log --oneline
-
git reflog:这个命令可以查看你所有的提交的记录
07查看文件状态
目标
掌握查看文件状态的命令,能理解文件的4种状态
内容
没有被托管的文件: 未跟踪 已被托管(曾经add,commit过)的文件:已修改,已暂存,已提交
命令
# 查看仓库文件的状态git status# 查看简略版信息git status -s
改动文件之后:
新添加文件:
-
未跟踪(新增的文件)
-
已修改(文件曾经被Git记录过了,然后在工作区对他进行了修改)
-
已暂存(新增的文件,添加到暂存区之后的状态)
-
已提交(nothing to commit)
-
表示没有什么东西可以提交了;即所有的内容都已经提交给git仓库了。
-
有的文档也把这个状态叫做 未修改,意思是自上次提交过后,代码还没有修改过
-
练习
自己操作文件,能看到4种状态。
08代码恢复
目标
掌握代码恢复的方法
从工作区恢复
改动了代码,想放弃修改(此时并没有add)
git status git restore 文件名
从暂存区恢复
改动了代码,也add了,此时想放弃。
git reset HEAD 文件名 git checkout -- 文件名
整体回滚
回滚之后
git reset --hard 提交流水号
会导致log信息不全。改用 git reflog ##
08文件_git忽略文件
目标
了解git忽略文件的作用和配置
讲解
-
有的时候, 我们某些文件/文件夹, 不想让git进行跟踪管理
-
这种场景下, 我们需要在.git文件夹隔壁, 来个叫做** .gitignore** (固定名字)的忽略文件, 并写入忽略规则
-
可以编写如下这些规则
# 井号表示注释# 忽略某个指定文件password.txt# 忽略文件夹css# 忽略文件夹下的某个文件css/index.js# 忽略文件夹下某类文件css/*.js
-
然后根目录新建password.txt, 查看 git追踪到了哪些变化
git status
-
发现只新增了.gitignore, 符合规则的都忽略掉了
小结
-
如何设置git忽略文件?
-
在.git文件夹隔壁建立一个.gitignore文件, 写入相关语法配置即可忽略此仓库文件夹下符合规则的文件夹/文件
09远端仓库介绍
目标
什么是远端仓库
远端(远程)仓库其实就是远程的git服务器,帮我们存储代码的服务器。
-
本地git存储:一旦你电脑丢了或者硬盘损坏,直接扑街
-
远程git存储:如果你电脑坏了换了一个新的,只需要从网上重新下载即可
常见的远程仓库有哪些? (1)github:免费。国外服务器,访问不稳定 。"全球最大的同性交友网站"
-
学习时候可以用,工作中有的小公司为了省钱也会用
(2)码云:免费。国内服务器。 (3)gitlab: (4)私服:公司自己机房的服务器(工作中遇到)
以上远程仓库使用流程几乎一致。
远程仓库的作用
多人协作
远程仓库的使用流程
leader(仓库的创建者,有最高的权限)
登录远程仓库,建立空项目; 给成员添加权限
成员
-
登录远程仓库
-
把代码拉到本地
-
本地编辑,保存,提交代码
-
同步到远程
小结
10远程仓库使用示例
目标
以码云为例,掌握远程仓库的使用
1.在码云网站
建立仓库
2.将远程仓库克隆到本地
git clone 仓库网址
git clone:克隆,将整个远程仓库克隆到本地
-
这个命名相当于拉取所有的代码(将整个远程仓库文件夹copy到你的本地)
-
这个命令一般只会在
项目开始
的时候执行一次
它会在本地创建目录。
3.本地编写代码
git add . 与git commit -m“添加文件信息“
4.将本地代码推送到远程
git push
5.将远程代码拉取到本地
git pull
:拉取,用于多人开发。比如别人写的代码文件提交到远程仓库,通过这个命令就可以将远程仓库代码拉取到本地
-
这个命令不会拉取所有代码,只是拉取远程上面新增的代码(把别人写的代码合并到你的本地)
-
这个命令,在多人开发的时候建议
每天
上班前执行一次
11远端仓库多人开发配置流程
目标
掌握多人开发的基本流程
内容
-
leader(仓库的创建者)邀请其他开发者小花
-
小花成为开发者
-
小花clone 代码
-
小花正常开发项目
-
git add .
-
git commit -m ""
-
-
小花提交代码
-
git push
-
整体图示
git pull 的常见错误
-
在pull之前要记得commit
-
合并冲突
合并:把两个版本的代码合在一起。 冲突:合并失败。 例如:
-
A同学改了a.txt的第一行,提交到了远程;
-
B同学本地仓库也改了a.txt的第一行,并commit
-
B同学git pull(从远程拉下来) 出现错误:两个人改了同一地方。
处理:
-
手动解决问题。看看使用什么代码
-
add commit
-
git pull
-
git push
12远程仓库SSH配置
目标
掌握远端仓库的SSH配置方式
两种访问方式
远程仓库有两种访问方式,分别是HTTPS
与SSH
-
HTTPS:
零配置
;但是每次访问仓库时,需要重复输入的账号和密码才能访问成功(现在不需要了) -
SSH:
需要进行额外的配置
;但是配置成功后,每次访问仓库时,不需重复输入账号和密码。公司中也实际开发推荐使用SSH方式访问远程仓库
SSH 介绍
加密通讯协议 SSH key 的作用:实现本地仓库和 Github 之间免登录的加密数据传输。 SSH key 的好处:免登录身份认证、数据加密传输。 SSH key 由两部分组成,分别是:
-
id_rsa(私钥文件,存放于客户端的电脑中即可)
-
id_rsa.pub(公钥文件,需要配置到远端服务器 中)
SSH配置流程
-
打开 Git Bash
-
输入命令:
ssh-keygen -t rsa -C '邮箱'
-
这里的邮箱要与 全局配置 (git config --global user.email) 以及 码云上的登记邮箱一致
-
连续敲击 3 次回车,即可在 C:\Users\用户名文件夹.ssh 目录中生成 id_rsa 和 id_rsa.pub 两个文件
-
-
使用记事本打开 id_rsa.pub 文件,复制里面的文本内容
-
在你的远程仓库网址,
点击头像 -> 设置 -> SSH 公钥 -> 粘贴
工作过程
小结
11分支介绍
问题导入
比如你的网站第一个版本已经做好发布了,功能也很稳定。现在准备新增一些功能开发2.0版本,问题是:如何去写代码? 如果在1.0的版本的基础上继续开发,那如何确保1.0的代码稳定呢? 程序员的做法:切分支。
图示:
理解分支
分支的本质是:一个指向某个版本的链接。
-
分支的作用是什么?
-
可以独立开发和维护提交版本记录, 和别的分支互不影响, 尤其多人开发同一个项目, 可以分别控制自己的代码
-
分支内功能开发完毕后, 需要最后一步做什么?
-
合并回到主分支, 保证最后主分支有所有模块的代码, 最后统一交付
分支的应用场景
-
开发时按功能模块切分支
-
例如:有5个页面,切5个分支
-
-
有bug时切分支开解决bug
git分支相关命令
GIT命名 | 作用 | 详细描述 |
---|---|---|
git branch | 查看当前工作分支 | |
git branch 分支名 | 新建子分支 | 新建一个小号存档,把当前存档备份到小号中 |
git checkout 分支名 | 切换工作分支 | 切换当前的账号(换小号刷装备) |
git merge分支名 | 合并分支 | 把子分支代码合并到主分支(小号刷得装备移到大号上面) |
git branch -d 分支名 | 删除子分支(慎用) | 把某一个分支删除 |
12.分支相关的典型操作
1. 查看分支
命令:git branch
功能:查看所有的分支 说明:项目在初始时,就会有一个默认的分支,名字是:master。表示主分支。
2.新建分支
命令: git branch 分支名
功能:创建新分支 示例: git branch v2
图示:
3.切换分支
命令:git checkout 分支名
(创建分支之后,你的代码默认还是在主分支,需要切换工作分支到子分支) 功能:切换分支 示例:git checkout v2
图示:
注意:切换分支时,要先commit
4.在新的分支上进行编码
提交代码的时候,指针也在移动 :::info // 改代码 git add . git commit -m "提交3" // 改代码 git add . git commit -m "提交4" :::
5.合并分支
格式: git merge 分支名 注意:merge之前,必须commit 合并:假设当前在master分支,把v2分支的代码合并过来。合并的目的:是master中的代码和v2的代码是一样。让master上也具有v2的代码。
6.删除分支
格式:git branch -d 分支名
示例:git branch -d v2
注意:
-
删除分支,也需要切换当前工作分支为其他分支
-
删除分支,不会导致代码丢失
13.git解决代码冲突
目标
理解出现冲突的原因,掌握解决冲突的方法
原因
两次提交改了同一个地方的代码。
测试1
步骤: 新建文件: 1.txt 写入内容:1111 提交。 切换分支:dev 写入内容: 1111dev 提交 切换分支: master 写入内容:master111 提交 merge dev
现状
合并:把两个版本的代码合在一起。 冲突:合并失败。 例如:
-
A同学改了a.txt的第一行,提交到了远程;
-
B同学本地仓库也改了a.txt的第一行,并commit
-
B同学git pull(从远程拉下来) 出现错误:两个人改了同一地方。
处理:
-
手动解决问题。看看使用什么代码
-
add commit
-
git pull
-
git push
14. 本地分支与远程分支
推送与拉取分支代码到远程仓库
-
1.查看远程分支:
git remote show 仓库别名
-
2.推送分支代码到远程仓库 :
git push -u origin 新分支名称
-
小技巧 : 根本不需要记这个指令, 直接
git push
即可。 如果是分支代码,你的git会自动给你提示,并且在下方告诉你推送这个分支正确的命名是什么。 到时候直接 CV 即可。
-
-
3.拉取某个远程分支到本地仓库:
git pull origin 分支名
附录:git常用命令
GIT命名 | 作用 | 详细描述 |
---|---|---|
git init | 初始化git仓库(类似于玩游戏新建一个存档文件) | 在当前文件夹中新建一个 .git隐藏文件夹 |
| git add . | 添加文件信息(相当于游戏开始存档) | 把要提交的文件的信息添加到暂存区中(常用
) | | git commit -m"描述信息" | 确认添加信息 (确认存档) | 将暂存区中的文件提交到本地仓库中(常用
) | | git config --global user.email "you@example.com " | 设置邮箱 | 第一次使用git会让你输入邮箱 | | git config --global user.name "Your Name" | 设置用户名 | 第一次使用git会让你输入用户名 | | git reset --hard 版本号 | 版本回滚
(游戏回档) | 可以让你的文件回退到历史某一个版本 | | git log | 查看详细日志(存档日志) | 会显示你的每一次存档信息 | | git log --oneline | 查看简略版日志 | 快速查看版本号 | | git reflog | 查看所有日志(包含回滚日志) | 回档回错了会用到 | | git clone '远程仓库地址' | 克隆远程仓库 | 把远程仓库所有文件下载到本地 | | git push | 推送代码到远程仓库 | 把当前电脑已经commit过的代码上传到远程仓库 | | git push origin 分支名 | 推送指定分支 | 一般不用记,git push如果不行会提示这个命令 | | git pull | 拉取远程仓库到本地 | 把远程仓库上别人push的代码同步到自己的本地电脑(只有多人开发才生效) | | git pull origin 分支名 | 拉取远程仓库指定分支到本地 | | | git branch | 查看当前工作分支
| | | git branch 分支名 | 新建子分支 | 新建一个小号存档,把当前存档备份到小号中 | | git checkout 分支名 | 切换工作分支 | 切换当前的账号(换小号刷装备) | | git merge分支名 | 合并分支 | 把子分支代码合并到主分支(小号刷得装备移到大号上面) | | git branch -d 分支名 | 删除子分支(慎用) | 把某一个分支删除 |