目录
1.版本控制
版本控制(版本迭代,新的版本),版本管理器
一种开发过程中用于管理对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前版本的软件工程技术
简单来说就是用于管理多人协同开发项目的技术
1.1 版本控制工具具备的功能
协同修改
多人并行不悖的修改服务器端的同一个文件
数据备份
不仅保存目录和文件的当前状态,还能保存每一个提交过的历史状态
版本管理
保存每一个版本的文件信息的时候要做到不保存重复数据,节约存储空间,提高运行效率;这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式
权限控制
对团队中参与开发的人员进行权限控制
对团队外开发者贡献的代码进行审核-----Git独有
历史记录
查看修改人、修改事件、修改内容、日志信息
将本地文件恢复到某一个历史状态
分制管理
2.主流版本控制器
Git
优势:
大部分操作在本地完成,不需要联网
完整性保证
尽可能添加数据而不是删除或修改数据
分支操作非常快捷流畅
与Linux命令全面兼容
Git在本地的目录结构
SVN
CVS
VSS
TFS
Visual Studio Online
3.版本控制分类
本地版本控制系统
记录文件每次更新,对每个版本做一个快照,或记录补丁文件,适合个人用,如RCS
集中式版本控制系统
所有版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改,需定期备份
弊端:所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不联网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且所有数据都保存在单一的服务器上,有很大风险这个服务会损坏,这样就会丢失所有数据,如SVN、CVS、VSS
分布式版本控制系统
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在联网时push到相应的服务器或其他用户,如Git
4.Git与SVN区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以先要从中央服务器得到最新版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统必须联网才能工作,对网络宽带需要较高
Git是分布式版本控制系统,没有中央服务器,每个人电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上,协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改
目前世界上最先进的分布式版本控制器
Git是免费、开源的,最初辅助Linux内核开发的,替代BitKeeper
Git环境配置
软件下载: Git,下载Git对应操作系统版本,所有东西下载慢找镜像
淘宝镜像:CNPM Binaries Mirror
先卸载
直接反安装即可,然后清理环境变量,环境变量只是为了全局使用而已,下载对应的版本即可安装,安装:无脑下一步即可,安装完毕即可使用
启动Git
安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序
Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多;清屏clear
Git CMD:Windows风格的命令行;清屏cls
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
1.基本命令
cd 改变目录
cd.. 回退到上一个目录,直接cd进入默认目录
pwd 显示当前所在目录路径
ls(ll) 列出当前目录中所有文件,只不过ll(两个ll)列出的内容更为详细
ll 查看当前目录中的文件(只显示隐藏文件)
ll -A 查看当前目录中的文件(包含了隐藏文件和非隐藏文件)
touch 新建一个文件,如touch index.js,就会在当前目录下新建一个index.js文件
rm 删除一个文件,如rm index.js,就会把index.js文件删除
$ git rm -rf / #清理所有东西,递归清除,并且把所有东西删掉;相当于格式化系统 -r 递归 f 强制
mkdir 新建一个目录,就是新建一个文件夹
rm -r 删除一个文件夹,rm -r src 删除src目录
mv/move 移动文件,mv index.html src,index.html是要移动的文件,src是目标文件夹,必须文件夹在同一目录下
reset 重新初始化终端/清屏
clear 清屏
Ctrl+l 清屏
history 查看命令历史
help 帮助
exit 退出
cat .gitconfig 查看签名
cd ~ 家目录
vim 创建文件
git init 版本库初始化
git config 设置签名
项目级别签名
git config user.name 用户名
git config user.email 邮箱名
用户级别签名
git config --global user.name 用户名
git config --global user.email 邮箱名
git status 查看状态
git add 添加指定文件到暂存区
git rm 删除文件
git commit 将暂存区中的文件提交到本地库,注意该命令会有一个弹窗编辑器弹出,按下i键 则输入内容,如果备注输入完毕则按下esc键 → :wq
git commit -m '描述信息' 将暂存区中的文件提交到本地库,使用了-m后不会弹出编辑器
git log :查看历史提交记录,如果提交的记录过多则需要翻页,按 空格 :向下翻页 b:向上翻页 q:表示退出查看
git log --pretty=oneline : 格式化在一行内输出提交记录
git log --oneline : 格式化简化输出提交记录,显示一部分的hash值
恢复历史
用于显示日志信息 git reflog
显示所有日志信息 git log reflog
实现回退
git reset --hard 哈希值 根据hash值进行回退
使用 git reset --hard HEAD~n 根据步数进行回退
#表示注释
2.Git配置
Git有三级配置,System、Global、工程目录,作用域依次减小,优先级依次升高
git config -l / --list 查看当前项目下配置
git config --system --list 查看系统配置
git config --global --list 查看当前用户(全局)配置
2.1 Git相关配置
Git\etc\gitconfig:Git安装目录下的gitconfig --system 系统级
C:Users\Administrator.gitconfig:只适用于当前登录用户的配置 --global 全局
这里可以直接编辑配置文件,通过命令设置后会响应到这里
2.2 设置用户名与邮箱 (签名必要)
安装‘Git后首先设置用户名和e-mail地址;因为每次Git提交都会使用该信息,它被永远的嵌入到提交中
项目级别签名
$ git config user.name "名称" $ git config user.email 邮箱号
用户级别签名
$ git config --global user.name "名称" $ git config --global user.email 邮箱号
只需做一次这个配置,如果你传递了--global选项,Git将总是会使用该信息处理你在系统中所做的一切操作。
希望在一个特定的项目中使用不同的名称或e-mail地址,可以在该项目中运行该命令而不要--global选项。
总之--global为全局配置,不加为某个项目的特定配置
Git基本
1.三个工作区域:
(工作区)工作目录(Working Directory):平时存放项目代码的地方
(暂存区)暂存区(Stage/Index):用于临时存放你的改动,实际就是一个文件,保存即将提交到文件列表信息
(本地库)资源库(Repository或Git Directory):安全存放数据的位置,有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本
加上下面这个,可以分为四个工作区域
远程git仓库(Remote Directory):托管代码的服务器,简单认为是你项目组中的一台电脑用于远程数据交换
本地三个区域确切的说是git仓库中HEAD指向的版本
2.工作流程
在工作目录中添加、修改文件
将需要进行版本管理的文件放入暂存区域 git add . (添加到仓库,“.”表示全部)
将暂存区域的文件提交到git仓库 git commite
因此,git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)
Git项目搭建
1.创建工作目录与常用指令
工作目录一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文
1.1 git本地常用命令
#设置签名分为项目级别签名与用户级别签名 #1.项目级别签名:在当前目录下设置 $ git config user.name 用户名 $ git config user.email 邮箱地址 #2.用户级别签名:为当前电脑设置 $ git config --global user.name 用户名 $ git config --global user.email 邮箱地址 #版本库初始化git文件 $ git init #将指定文件从工作区添加到暂存区 $ git add 文件名 #将当前目录中所有的文件添加到暂存区 $ git add -A . #查看文件状态 $ git status #提交暂存区中的内容到本地仓库 -m 提交信息 $ git commit -m "提交信息"
1.2 远程仓库(中央仓库)
#gitee(码云)中新建一个仓库,此时产生仓库的地址 #git地址别名设置 $ git remote add 地址别名名称 https的地址 #查看项目的地址别名 $ git remote -v #当工作区的内容有更改,则需要推送到中央仓库 $ git add -A . $ git commit -m "描述" $ git push 地址别名 分支名
1.3 可能使用的命令
日志查看
#空格:向下翻页 b:向上翻页 q:退出查看 $ git log #格式化在一行内输出提交记录 $ git --pretty=oneline #格式化简化输出提交记录 $ git --oneline
回退历史
1.查看历史回退的hash值 $ git reflog 2.实现回退 #根据哈希值进行回退 $ git reset --hard 哈希值 #根据步数进行回退 $ git reset --hard HEAD~n
2.本地仓库搭建
创建本地仓库的方法有两种:
创建全新的仓库
#在当前目录新建一个Git代码库 $ git init 初始化文件 #执行后可以看到在项目目录多出了一个隐藏.git目录,关于版本等的所有信息都在这个目录里面
克隆远程仓库
#克隆一个项目和它的整个代码历史(代码信息) $ git clone [url] #去gitee或者github上克隆一个测试
3.Git分支
3.1 分支命令
查看分支:git branch -v
创建分支:git branch 分支名
切换分支:git checkout 分支名
合并分支:git merge 分支名
3.2 解决冲突
冲突:有两个分支,一个分支为master分支,另一个分支为good分支,对同一个文件进行修改,先提交的分支不存在冲突(因为先提交的和本地库的版本是相同的),后提交的会有冲突(因为后提交文件的版本和本地库的版本有偏差)
1.两个分支分别是master分支和good分支,两个分支初始化的文件是相同的版本号,都针对test.txt文件
2.在master分支下修改文件,然后→使用命令:git add . 添加暂存区→使用命令:git commit -m '提交本地信息'
3.使用命令:git checkout 分支名 切换到good分支修改文件,然后→使用命令:git add . 添加暂存区→使用命令:git commit -m '提交本地信息'→使用命令:git merge 合并master(产生冲突)
4.解决冲突:手动删除文件中属于冲突的标识符 <<<== head 哈希序列 =>
5.将已经解决冲突的文件→使用命令:git add . 添加至暂存区→git commit -m '提交本地信息'→.使用命令: git checkout 分支名 切换至master分支→使用命令:git merge 合并good分支
4.协同开发
一个开发团队有多个人,协同开发一个项目时需要将所有人得代码进行整合
推送:git push 地址别名 分支名
拉取:git pull 地址别名
操作:
一个账号(甲账号)推送一个项目到服务(已有的远程仓库,由甲账号创建爱你,并将项目设置为开源)
另一个账号(乙账号)要克隆项目(在本地的目录选中使用git终端,在终端种输入克隆命令:git clone 项目https地址,仓库为开源的)
在乙账号中使用:git vim test.txt 或者git touch test.txt 命令创建一个test.txt文件→git add . →git commit -m '描述' → git push 地址别名 分支名 (由于乙账号不在甲账号所创建的仓库成员中,所以需要使用甲账号邀请乙账号为团队成员)
在甲账号中的目录下使用git pull 地址别名 分支名 进行拉取项目
4.1 协同开发解决冲突
产生冲突:两个账号,使用甲账号修改内容,然后提交到远程仓库;使用乙账号修改同样的文件内容,然后提交到远程仓库
解决冲突:修改文件→git add . → git commit -m ‘描述’ → git push 地址别名 分支名 → 如果有冲突 → git pull 地址别名 分支名 → 解决冲突 → git add . → git commit -m ‘描述’ → git push 地址别名 分支名
4.2 新手开发
安装git
设置签名
项目级别签名
git config user.name 用户名
git config user.email 邮箱名
用户级别签名
git config --global user.name 用户名
git config --global user.email 邮箱名
克隆项目
拿到git项目的地址,按照该地址将项目目录完整的克隆,使用命令: git clone
注意:如果项目目录是克隆的,那么无需再配置地址别名,会自带地址别名等配置,也无需执行git init,因为会自带.git 隐藏目录
地址别名相关命令
查看地址别名:git remote -v
添加地址别名:git remote add 地址别名 地址路径
修改代码
将修改的代码添加到暂存区,使用命令:git add . →提交到本地库,使用命令:git commit -m ‘描述’ →推送到远程仓库,使用命令:git push 地址别名 分支名 →如果有冲突,解决冲突→git pull 地址别名 分支名 → 解决冲突 → git add . → git commit -m ‘描述’ → git push 地址别名 分支名
更新别人修改的代码
gei pull 地址别名 分支名
4.3 分支操作模式
在本地除了一个master分支作为主分支之外,然后再创建一个属于自己的工作分支
优势:如果有开发冲突,只需要在本地的工作分支和master分支进行解决即可
创建工作分支,使用:git branch 工作分支名
切换工作分支,使用:git checkout 工作分支名
开发
添加到暂存区,使用:git add .→提交到本地(该操作一定要在工作分支下完成),使用:git commit -m '描述'
切换到master主分支,使用:git checkout master
合并工作分支,使用:git merge 工作分支名
将master分支推送到远程仓库,使用:git push 地址别名 分支名
Git文件操作
1.文件四种状态
Untracked:未跟踪,此文件在文件夹中,并没有加入到git仓库,不参与版本控制,通过
git add
(添加到暂存区)状态变为Staged
Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改,而变为
Modified
,如果使用git rm
移除版本库,则成为Untracked
文件Modified:文件已修改,仅仅是修改,并没有进行其他操作,这个文件也有两个去处,通过
git add
可进入暂存Staged
状态,使用git checkout
则丢弃修改过,返回到unmodify
状态,这个git checkout
即从库中取出文件,覆盖当前修改Staged:暂存状态,执行
git commit
则将修改同步到库中,这时库中文件和本地文件又变为一致,文件为Unmodify
状态,执行git reset HEAD filename
取消暂存,文件状态为Modified
2.查看文件状态
#查看指定文件状态 $ git status [filename] #查看所有文件状态 $ git status # git add . 添加所有文件到暂存区 # git commit -m 提交暂存区中的内容到本地仓库 -m 提交信息
工作中,一般会把代码放在工作目录下
3.忽略文件
前端项目中 npm_moudles 不用提交
有时候不想把某些文件纳入版本控制中,如数据库文件、临时文件、设计文件
在主目录下建立".gitignore"文件,此文件有如下规则
忽略文件中的空行或以#号开始的行将会被忽略
可以使用Linux通配符,例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等
如果名称最前面有一个感叹号(!),表示例外规则,将不被忽略
如果名称最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略
如果名称最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
#为注释 *.txt #忽略所有 .txt结尾文件 !lib.txt #但lib.txt除外 /temp #仅忽略项目根目录下的TODO文件,不包括其他目录temp build/ #忽略build/目录下的所有文件 doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt使用
4.使用码云
github是有墙的,需要翻墙;一般用gitee,公司有时候会搭建自己的git服务器
注册登录码云,完善个人信息
设置本机绑定SSH公钥,实现免密码登录(免密码登录,重要!!码云是远程仓库,平时工作在本地仓库)
# 进入 C:Users\Administrator\.ssh 目录 # 生成公钥 ssh-keygen -t rsa #-t rsa 加密算法
将公钥信息public key 添加到码云账户中即可
使用码云创建一个自己的仓库
新建仓库
使用git clone 地址