1. 版本管理
1.1 人工版本管理
人工管理: 费时费力。
1.2 git 概述
git是一款版本管理软件, 可以在任何时间点保存文件,也能够恢复到以前任何时间点保存的文档
main.cpp 在不同的时间点进行了保存,那么就能恢复到任意一个时间点保存的文件
2. git安装
下载地址: https://git-scm.com/downloadshttps://git-scm.com/downloads
下载文件:
安装过程是傻瓜安装,全部next即可。
但是如果要调整安装路径,必须不能包含中文。
安装完成后右键菜单会多出两个选项:
点击 Git Bash Here 可以打开git命令行工具。
学习git 就是学习git命令
3. git 基本操作
3.1 配置 git 用户信息
- 配置提交人姓名:
git config --global user.name 姓名
- 配置提交人邮箱:
git config --global user.email 邮箱地址
- 查看git信息:
git config --list
- git配置文件路径:
C:\Users\Administrator\.gitconfig
3.2 git工作流程
- 工作目录: 自己的项目目录
- 暂存区: 存放临时修改的文件
- git仓库: 用来保存编写好的项目文件,任何一个文件都能在任何时间点进行保存
工作流:
- 在项目目录下创建项目文件
- 将项目文件提交到暂存区注意: 存放在暂存区的文件只有一份,后提交的会覆盖之前提交的文件
- 暂存区文件才能再提交到 Git 仓库注意:git 仓库中,同一个文件会有多份,都有自己的id号(版本号)
3.3 git基本操作命令
- git init -初始化git仓库
- git status -查看文件状态
- git add 文件名 -添加文件到暂存区,该文件被git管理起来
- git commit -m 提交信息 -向仓库中提交代码,需要添加提交日志信息
- git log -查看提交记录
1.创建项目,并创建 git仓库
2.仓库状态
- On branch master --- 分支相关信息,暂不用看
- No commits yet --- 尚没有文件提交到仓库
- Untracked files --- 未追踪文件,即还没有被 git 仓库管理的文件- 重点:红色代表该文件还没有被 git 管理
3.将main.cpp 添加到暂存区
new file: 代表该文件已增加到暂存区
4.将main.cpp 文件提交到 git 仓库
5.查看日志
3.4 git忽略清单
在实际开发中,有些 文件/文件夹 是不需要被 git 管理的
实际开发时,在项目根目录下创建一个 .git ignore 文件,在文件中写入不希望git管理的文件或者文件夹名称即可
查看状态,此时已经看不到 myapp.pro.user 文件了
3.5 一次性提交多个文件
git add . : . 代表任意文件
3.6 修改文件后再次提交
1.修改 widget.cpp 文件
2.查看文件状态
modified: 说明哪些文件发生了改变,并且在修改之后并没有提交到git
3.再次提交
4. 文件恢复
4.1 暂存区-->项目目录
目标: 使用暂存区中的文件,覆盖当前项目目录中的文件
应用场景: 在时间点A向暂存区进行了一次提交, 之后继续编写代码,在时间点B发现代码有错,需要恢复成时间点A的代码
git checkout 文件名
示例:
1. 修改 widget.cpp 文件中的代码
重点:代码修改完成后并未再次添加到暂存区
- 查看文件状态
3.从暂存区恢复
- 回到Qt编辑器会提示文件被修改过
选择 "Yes to All" 时,恢复成原来的状态(暂存区的版本)
4.2 删除暂存区文件
git rm --cached 文件名
示例1: git rm --cached widget.cpp 从暂存区删除 widget.cpp 文件
示例2: git rm --cached -r . 从暂存区删除所有文件
4.3 git仓库 --> 项目目录(版本穿越)
git log 查看已有版本
git reset --hard commitID
该命令能够从仓库恢复文件,从仓库恢复的文件会同时覆盖暂存区和项目目录的文件。同时,git log命令只能查看到恢复到的版本号。之后的版本号无法看到。
1.使用 git log 查看之前提交的版本
2.要穿越到哪个版本就复制哪个版本号
3.再次查看日志
只能看到第一次提交的版本号
4.4 精简版信息查看
git reflog 查看精简版
查看精简版,能够看到所有的操作
该命令读取的是 .git/logs/HEAD 文件
如果要穿越回其他的任意版本号,都可以从该文件中找到
5. 分支
5.1 分支概述
分支概念: 为项目创建多个副本,每个副本完成一个独立的工作。 分支能够做到多件事情同时进行,且互不影响
- 主分支(master)- 主分支是系统默认使用的分支,之前示例中的代码提交全部都是在主分支中完成的- 主分支上最终会保存整个项目的完整代码,项目开发完成后要上线运行,也是运行的主分支上得完整代码
- 开发分支(develop)- 开发分支是为了完成某个功能模块的开发而单独建立的副本。例如:开发用户管理模块(users.cpp)页面时,就能创建 users 分支。- 开发分支是基于主分支创建的,当然一个开发分支下还能再创建另一个开发分支,形成 父-子-孙-... 结构- 开发分支上工作完成后,一定会合并回主分支
主分支: 系统默认是在主分支(master)上的
开发分支
小结
- 主分支是Git自动帮我们创建的 master,这条分支上的代码一般用于都是线上的项目
- 开发分支,在主分支上进行创建,一般用于我们开发的时候使用,也需要尽量保证其稳定性
5.2 分支命令
- 查看分支:
git branch
- 创建分支:
git branch 分支名
- 在哪条分支上输入的命令,就是在哪条分支上进行的创建- git branch users 创建了一个叫做 users 的分支 - 切换分支:
git checkout 分支名
- git checkout users 切换到 users 分支上- 在 users 分支上只能看到 主分支 和 当前分支(users)上的文件 - 注意:当切换分支的时候,需要把暂存区里面的文件进行提交,不然会暂存区里面的文件会跟着到切换的这条分支上- 当切换回主分支的时候,就看不到其他分支里面的文件了
- 注意: 切换分支时,必须保证当前分支的文件全部提交到仓库。
创建和使用分支案例,步骤如下 :
- 创建项目,并在创建时选择 git 作为版本管理工具
- 新建一个 MyButton 自定义控件,将项目提交到暂存区,再提交到仓库
- 查看分支,创建 users 分支,切换到 users 分支
- 创建 Users模块,并将Users模块提交到users分支上
- 切换 master/users 分支, 查看编辑器中文件显示的情况
1.创建项目,并在创建时选择 git 作为版本管理工具
使用git时会自动生成一个master分支,也叫主分支。项目默认创建在master分支上
- 新建一个 MyButton 自定义控件,将项目提交到暂存区,再提交到仓库
注意: 创建的自定义空间也要交给 git 管理
通过 Qt Creator 创建的项目和文件已经添加到 暂存区
将文件提交到暂存区,再提交到git仓库
3.查看分支,创建 users 分支,切换到 users分支
- 创建 Users模块,并将Users模块提交到users分支上
查看git 状态
将 Users 模块提交到users分支
- 切换 master/users 分支, 查看编辑器中文件显示的情况
① 查看编辑器中的状态
② 切换回主分支
③ 回到编辑器中
编辑器中提示保存文件,一定要选择 **关闭 **项。
④ 切换至 users 分支,观察编辑器
- 同理,创建 goods分支、Goods 模块
5.3 合并分支
- 合并分支:
git merge 分支名
- git merge users 合并 users 分支- 注意: 合并分支时,要在 master 分支上
5.4 删除分支
- 删除分支:
git branch -d 分支名
- 分支如果没有被合并则不允许删除
- 如果要强制删除使用 -D 参数
强制删除 goods 分支
5.5 临时存储分支
当在某一分支上进行开发时,如果该分支上的文件没有提交到 git 仓库,则不允许进行分支切换。
当你在一个分支工作时,临时出现了一个更紧急的任务需要马上完成。而此时,当前分支的工作并没有完成,也不希望提交,这时就可以进行临时存储。
- 将当前所有的改动临时存储: git stash
- 将临时存储进行恢复: git stash pop
注意:
- 在其他的分支中也能执行恢复改动,但是会把这些文件恢复到当前命令的分支,所以我们在恢复的时候需要注意,我们当时在哪个分支进行的开发
示例:
- 创建 test分支,创建 Test 模块,将 Test模块添加到 test分支
- 对 test.cpp 进行修改
3.因为 test.cpp 被修改了,如果在未提交到仓库前就进行分支切换,会报错
4.此时如果要切换分支,则需要将修改保存到临时存储分支
5.切换分支
6.切换回test分支,并恢复
6. 远程仓库
6.1 远程仓库(github/gitee)
- 企业开发项目时,通常都是若干人组成一个项目组进行开发。
- git 只能在本地电脑上创建仓库,管理个人编写的项目代码,而实际开发时需要团队协作,这时就需要一个共用的仓库,这个仓库会单独放在一台服务器上,在这台服务器上搭建的仓库就是远程仓库。
- 远程仓库可以是公司内部自行搭建的,也可以使用互联网上的远程仓库。github 和 gitee 是最常用的互联网远程仓库。
- github是国外的网站,所以速度相对慢一些;gitee(码云),是国内的网站,速度快一些。
6.2 注册 gitee 账号
6.3 多人协作流程
- 项目经理(PM)在本地创建项目主体架构,并提交到本地git仓库;再将项目推送(push)到远程仓库(github、gitee)上
- 邀请程序员 A、B、C 加入项目组
- 程序员 A、B、C 可以远程克隆(clone)项目,然后按照之前分配好的任务完成自己的功能
- 程序员完成功能后,将自己写的代码再推送(push)到远程仓库中
- 项目经理从远程仓库中拉取(pull)所有完成好的项目代码
6.4 PM创建本地仓库
目标:PM创建本地仓库,并将代码提交到本地仓库
步骤:
- PM创建本地仓库
- PM将项目代码添加到暂存区
- PM将项目代码提交到本地仓库
- PM创建远程仓库 (github)
# 初始化仓库
git init
# 将项目代码添加到暂存区,
git add .
# 将项目代码提交到本地仓库
git commit -m PM创建项目仓库提交原型
6.5 PM创建远程仓库
1.创建远程仓库
2.填写仓库信息
3.仓库创建成功
6.6 PM将项目文件推送到github
# 将本地仓库中的最新版本推送到远程仓库
git push https://gitee.com/hhb1218/pm.git master
向远程仓库推送数据时,需要填写用户名和密码
提交成功提示
重载远程仓库页面
6.7 windows凭据
windows凭据中记录了github的账号和密码,所以再向github中推送数据时,不需要再添加账号和密码
6.8 简化推送命令
为远程仓库地址设置别名:
git remote add 别名 远程仓库地址
示例:
# 为远程仓库设置一个简单的别名
git remote add origin https://gitee.com/hhb1218/pm.git
# 使用别名进行推送
git push origin master
# -u 能够保存提交地址和分支下一次直接使用
git push -u origin master
# 使用过 -u 参数后,再次提交,直接使用 git push 即可
git push
6.9 组员clone项目
clone 不需要权限
git clone https://gitee.com/hhb1218/pm.git
6.10 组员修改程序后提交回远程仓库
PM必须将codeA、codeB、codeC邀请为组员,否则codeA、codeB、codeC没有权限向远程仓库提交数据。
PM 邀请 codeA、B、C 成为开发者:
复制邀请链接并发送给 codeA、B、C
codeA、B、C 接收邀请:
codeA、B、C 登录 gitee后,将PM发送的邀请链接地址复制到浏览器地址栏中
codeA、B、C 接受邀请
6.11 PM拉取最新版本
git pull origin master
- git clone 是在第一次加入项目时使用,从远程仓库下载完整的项目代码
- git pull 是在已有代码基础上执行的,只拉取新增或者修改的文件
6.12 冲突解决
解决办法: coderB 将冲突文件修改后再向 github 进行提交
coderB 要先拉取(git pull) 远程仓库的代码; 手动修改文件解决冲突;再 commit 到本地仓库,再git push 到远程仓库
报错信息:
拉取时提示的冲突信息:
7. ssh免密登陆
- ssh: 不需要输入用户名和密码也能登录
- ssh 通过验证公钥和私钥的配对情况决定是否登录
- 公钥和私钥需要开发者使用命令生成
- 公钥:保存在远程仓库
- 私钥:保存在开发者电脑
步骤:
- 生成秘钥: ssh-keygen
- 将公钥复制到 github 中
第一步:生成公钥和私钥:
第二步: 找到公钥并复制公钥字符串:
使用编辑器打开公钥文件,复制文件内容 :
第三步:在gitee仓库中找到 ssh :
第四步: 将公钥添加到网站中 :
使用 ssh 提交文件:
# 为远程仓库地址起一个别名
git remote add alishow_ssh [email protected]:hhb1218/alishow.git
# 使用 git push 提交文件
git push -u alishow_ssh master
git push
8. readme.md
版权归原作者 岚月~白虎 所有, 如有侵权,请联系我们删除。