常用的版本管理工具git ( 有的使用svn )
作用
维护代码的工具,进行版本控制,在团队协作中优势非常明显
版本的概念
(1) 初指一种书籍经过多次传抄、刻印或以其他方式而形成的各种不同本子。随着时代的发展,版本也开始应用于影视、软件等事物上,形容事物相同但介绍方法等不同的两个事物。
(2) 软件版本编号制定是指为软件设置版本号码的方式。通常,版本号码会以数字订定。
(3) 软件名称后面经常有一些英文和数字,如:CTS3.3.5、QQ 2021 Beta,这些都是软件的版本标志,通过它,我们可以对软件的类型有所了解。
各版本的时间轴演变,每一次版本的改变,都会有功能的改变。
以支付宝为例:手机支付宝-支付宝 知托付!
这么多版本,如果去维护文件代码,即如何进行不同版本的管理
管理版本
1.传统管理方式
问题:传统管理方式造成了本地电脑上有很多相同的文件,不容易维护,造成了非常混乱的局面。
2.版本控制方式
介绍:
好处:使用版本控制以后,只需在本地保存一份,各个版本由版本控制软件来进行管理,常见的版本控制软件有git和svn。
git介绍
定义:
Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。
特点:
项目越大越复杂,协同开发者越多,越能体现出Git 的高性能和高可用性!并且git有3个区域
三个区域
- 工作区(写代码的地方)
- 暂存区(完成一部分功能,先临时存放一下)
- 仓库区(所有的功能完成)
安装步骤
下载
淘宝镜像:CNPM Binaries Mirror
安装
开发者的一些软件,安装路径尽量不要有中文
配置用户信息
描述:安装完Git 之后,需要设置自己的用户名和邮件地址。进行管理的时候,Git 需要使用这些基本信息,来记录是谁对项目进行了操作(团体开发,需要记录谁进行了什么操作)
配置命令:
git config --global user.name xxx
git config --global user.email xxx
配置步骤:
- 在任意目录下打开 git bash here(鼠标右键,然后点击git bash here)
- 设置用户名
- 设置邮箱
- 查看是否配置成功 git config --list(或者查看git配置文件C:\Users\ 电脑用户名 \ .gitcongfig)
特殊说明:
在自己的电脑上,只需要配置一次就可以
Git操作步骤
(1) 使用git初始化项目
- 创建项目根文件夹
- 在根文件夹下打开 git bash here
- 初始化项目
git init # 每个项目执行一次就行
(2) 编写代码
(3) 把工作区添加到暂存区
git add 文件路径 # 把工作区的某个文件添加到暂存区
git add 文件路径 文件路径。。。 # 把某些文件添加到暂存区
git add 文件夹路径 # 把工作区的某个文件夹添加到暂存区
git add . # 把工作区的所有内容添加到暂存区
(4) 把暂存区添加到仓库区
git commit -m 提交说明
git commit -m "版本说明" # 把暂存区的内容添加到仓库区 ( 每次commit 都会生成一个新的版本 )
git commit -m 版本说明 # 版本说明可以不加引号
git commit -m "版本说明1 版本说明2" # 如果有空格则需要加上引号
特殊说明:
.git 文件夹(不要对git里的文件做任何修改,当我们执行命令时会自动修改)
Git命令总结
- 初始化:
git init
- 把工作区内容添加到暂存区
git add 文件路径
git add 文件路径 文件路径。。。 #把某些文件添加到暂存区
git add 文件夹路径
git add 文件夹路径 文件夹路径。。。 #把某些文件夹包括里面的内容都添加到暂存区
git add . # . 代表当前目录下的所有文件和文件夹
- 把暂存区内容添加到仓库区
git commit -m 提交说明
- 查看仓库中文件的状态
git status # 查看状态
工作区和暂存区都是干净的
On branch master # master 分支上
nothing to commit, working tree clean
# 没有东西可更新 工作区是干净的
工作区有内容,但是暂存区没内容(没有add 直接commit的时候)
On branch master
Changes not staged for commit: # 有内容 但是还没有到commit这一步 先add
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
暂存区有内容的时候:
On branch master
Changes to be committed: # 一些修改应该被提交
(use "git restore --staged <file>..." to unstage)
modified: index.html
- 回退版本
git reset --hard 版本号
- 查看提交日志
git log # 以完整的形式输出
git log --oneline #以简短的形式输出
commit 257de6d25b804df31550de08e7ac08b86de43faa (HEAD -> master)
Author: haohaohao <12345@163.coom>
Date: Fri Jul 22 14:45:28 2022 +0800
又又一个版本
commit ff1e540e2c89c027774172e2b92cc9a1407ff2b8
Author: haohaohao <12345@163.coom>
Date: Fri Jul 22 14:44:57 2022 +0800
又一个版本
commit 53dec970cf1df586ac42b9c70532d49c458218a9
Author: haohaohao <12345@163.coom>
Date: Fri Jul 22 14:43:25 2022 +0800
刚才的内容不小心删了
- 查看所有的版本记录
git reflog
53dec97 (HEAD -> master) HEAD@{0}: reset: moving to 53dec97
257de6d HEAD@{1}: reset: moving to 257de6d
257de6d HEAD@{2}: reset: moving to 257de6d
53dec97 (HEAD -> master) HEAD@{3}: reset: moving to 53dec97
ff1e540 HEAD@{4}: reset: moving to ff1e540
257de6d HEAD@{5}: commit: 又又一个版本
ff1e540 HEAD@{6}: commit: 又一个版本
53dec97 (HEAD -> master) HEAD@{7}: commit (initial): 刚才的内容不小心删了
文件忽略
介绍:
对于无需使用git进行管理的文件或文件夹使用此文件进行配置(公共代码)
使用步骤:
- 创建配置文件 .gitignore (和.git 文件夹同级)(win7不能直接创建,需要使用vscode创建)
- 在配置文件中添加一些忽略配置
常用配置规则:
(1) /文件夹名/ 忽略整个文件夹
(2) *.txt 忽略所有 .txt 文件
(3) /文件夹名/文件名 忽略某个具体文件
/css/reset.css
*.css
/css/
# 忽略某个文件
/css/a.css
# /js/index.js
# /js/list.js
# 忽略某种文件
*.js
# 忽略某个文件夹下的所有内容
/css/
分支
介绍:
git版本控制系统支持分支操作。使用分支意味着可以从开发主线上分离开来,然后在不影响主线的同时继续工作。默认只有一个分支为master主分支。
什么是主分支?
在初始化本地 Git 仓库的时候,Git 默认已经帮我们创建了一个名字叫做 master 的分支。通常我们把这个master 分支叫做主分支
主分支的问题:
在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目功能的开发
分支解决的问题:
用来保存和记录整个项目已完成的功能代码。但是不允许程序员直接在master 分支上修改代码,这样做的风险太高,容易导致整个项目崩溃
协议规定:不应该在master主分支上维护代码,应该在主分支的基础上创建分支,然后维护代码
注意事项:在分支上的提交操作和主分支的提价操作命令是一样的
分支相关命令
- 查看当前git管理的项目中有哪些分支
git branch
- 创建分支 (如果在主分支上没有任何提交则不允许创建分支)
git branch 分支名
- 切换分支(当第一次切换到分支上时,分支会从主分支上复制一份完整的代码)
git checkout 分支名
- 合并分支(把某些分支记录合并到当前分支上,一般此命令在master主分支上执行)
git merge 分支
合并时,当同一个文件做了不同的修改,就会出现冲突
解决冲突
介绍:如果在两个不同的分支中,对同一个文件进行了不同的修改,Git 就没法合并它们。 我们需要打开这些包含冲突的文件然后手动解决冲突。
补充:当再次切换到分支时,需要再次合并(git merge master)
避免冲突
不同功能模块是不会发生冲突的,只有修改了公共文件才有可能发生冲突(谁修改了公共文件,在团队群里告知一下)
远程仓库
介绍:
Git 命令都是在本地执行,如果想通过 Git 分享你的代码或者与其他开发人员合作。 就需要将文件放到一台其他开发人员能够连接的服务器上。这就是远程仓库的作用。
远程仓库分类:
(1) github:github是一个基于git的代码托管平台,在国外,速度比较慢,在大陆的使用很受影响
(2) gitee:gitee是一个基于git的代码托管平台,国内使用频率较多 (码云)
(3) 公司自己部署,了解即可,不是前端人员部署的,使用步骤和命令都一样
操作流程
- 注册 Gitee - 基于 Git 的代码托管和研发协作平台
- 创建远程仓库
在任何界面顶部都有一个加号,划上加号,会有一个下拉框,点击新建仓库
- 本地文件推送到远程仓库
配置本地仓库和远程仓库(把本地仓库和远程仓库之间建立一个联系)
git remote add 远程仓库别名 远程仓库地址
# 远程仓库别名 一般是origin,可以写为其他的
把本地分支推送到远程仓库上
git push 远程仓库别名 分支名 # 把这个本地分支推送到这个远程仓库上
git push -u 远程仓库别名 分支名
# -u参数的作用是,以后可以直接git push 来代替 git push 远程仓库别名 分支名
- 克隆和同步远程仓库
相关命令总结
- 配置本地仓库和远程仓库(别名的作用是代替远程仓库地址)
git remote add 远程仓库别名 远程仓库地址 #把远程地址添加包本地仓库上,并给远程仓库起一个别名
git remote rm 远程仓库别名 # 删除远程仓库配置
- 查看远程地址信息
git remote -v
- 把本地仓库推送到远程仓库
git push 远程仓库别名 分支名 # 把本地分支上传到远程仓库上
git push -u 远程仓库别名 分支名
# 当提交的时候使用了-u参数,那么Git就在本地仓库中记录了这次远程仓库别名和本地分支名,在以后提交的时候直接使用:git push (代表将当前分支推送到远程仓库上)
不是每次都要推送远程仓库的,当完成了某项功能以后再进行add/commit/push
- 复制一份远程仓库到本地(第一次)
git clone 远程地址 [文件夹名]
- 把远程信息进行更新
git pull