其他
超详细的 Git & GitHub 实用教程
1. 为什么需要版本控制
在我们每个人独立开发项目的时候,都会不知不觉的用到版本控制,只是我们并不知道“版本控制”这个名词,没有过多的在意~
主控芯片: STC89C52RC
;AD芯片: ADC0832
;显示模块: 096'OLED(IIC)
;
编写STC89C52RC的串口驱动程序,实现串口发送功能,用于后期调试; 编写ADC0832的驱动程序,实现采集电压值并通过串口发送功能; 编写OLED的驱动程序,实现电压值实时显示功能;
提高代码重用性
比如其中的01-bsp_uart_tx
文件夹,实现了串口发送的独立功能,当下次项目中需要时,可以直接拷贝过去而无需重写;方便版本回退
(重点)
当编写第三个功能03-adc0832+uart+oled
的时候,因为思路不清晰导致代码出错,这个时候如果将新添加的代码都找到删除,工作量非常大,而且效率极低,有了版本控制,我们可以直接在02-adc0832+uart
的基础上重新编写;
2.为什么需要版本控制工具
在上一节中我们通过多个文件夹的方式手动实现了版本控制,但是该方式也有一个非常大的缺点:
迭代建立文件夹,重复内容多; 版本迭代时修改的内容无法查看;
集中式版本控制工具:SVN 分布式版本控制工具:Git
保存了数据当前状态以及之前每一个提交的历史状态,可以回退到任意一个版本节点; 在保存每一个版本的文件信息时不重复保存数据,节约存储空间,提高运行效率; 可以清楚到看到不同版本间修改的内容; 可以多人协作,团队开发;
3. 版本控制软件的多人协作优势
A同学负责adc0832的驱动实现,在main.c中编写测试函数进行测试; B同学负责OLED的驱动实现,在main.中编写测试函数进行测试;
main.c
文件提交到公共服务器上,当B提交main.c
后,公有服务器上A提交的main.c
被B提交的文件所覆盖。协同修改
多个人可以修改服务器上的同一个文件,互不影响; 权限管理
对团队中参与开发的人员进行权限控制; 对团队外参与开发的人员贡献的代码进行审核(Git独有); 历史记录
查看修改人、修改时间、修改内容、修改日志;
1.Git简介
直接记录快照,而非差异比较; 几乎所有操作都是本地执行; Git 保证数据完整性; Git 一般只添加数据;
已提交(committed)
:表示数据已经安全的保存在本地数据库中;已修改(modified)
:表示修改了文件,但还没保存到数据库中;已暂存(staged)
:对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中;
Git 仓库
:Git用来保存项目的元数据和对象数据库的地方;工作目录
:对项目的某个版本独立提取出来的内容;暂存区域
:保存了下次将提交的文件列表信息;
在工作目录中修改文件; 暂存文件,将文件的快照放入暂存区域; 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录;
2.在Windows上安装Git
截止本文发表时间,Git最新版为 2.23.0
,安装过程同下,无任何影响)。
3.在Linux上安装Git
Centos/Fedora:
Debian/ubuntu:
4.初次运行Git前的配置——设置用户名和邮箱
该信息和Github账号无任何关系,方便起见,建议对应。
git config --global user.email <Git用户邮箱>
思维导图使用『幕布』绘制
1.获取Git仓库
方法1. 在现有目录下初始化一个新的本地仓库
在Git Bash中进入工作目录或者直接在工作目录右击,选择 Git Bash Here
打开Git命令行;使用命令初始化仓库:
本地仓库初始化成功后,Git会在当前目录新建一个 .git
的隐藏文件夹,该文件夹中包含了初始化的Git仓库中所有的必须文件,具体在后续详细讲解:
方法2.克隆(拉取)现有的仓库到本地
2.提交更新到仓库(重点)
已跟踪:在上一次提交的快照中有记录,已被纳入版本管理(获取仓库时,工作目录下所有的文件都是已跟踪文件); 未跟踪:除已跟踪文件之外的所有文件都属于未跟踪文件。
2.1.查看文件当前状态
-s
参数输出简短信息:2.2.跟踪新文件
文件名支持通配符 `(比如`.c
表示工作区所有c文件);如果是目录,则递归跟踪该目录下所有文件;
-A
参数表示跟踪所有文件:2.3.修改当前文件
test.c
并编辑如下代码:int main(void)
{
printf("Hello World.\n");
return 0;
}
2.4.暂存已修改文件
Changes not staged for commit
,这表明文件修改后没有保存到暂存区,使用如下命令将修改保存到暂存区:-A
参数表示暂存所有已修改文件:2.5.查看未暂存和已暂存的修改
当前做的哪些更新没有暂存? 有哪些更新已经暂存起来准备下次提交?
git status
命令只能表明文件,要查看具体内容使用该命令:test.c
文件中添加一行代码:git status
和git diff
查看:2.6.提交更新
git status
查看,确认所有改变已经暂存。2.7.跳过暂存区域直接提交更新
2.8.忽略文件
编译生成的中间文件、临时文件、可执行文件等等; 日志文件 ……
.gitignore
的文件来列出忽略文件的模式。.gitignore
的格式规范如下:所有空行或者以 #
开头的行会被Git忽略;可以使用标准的glob模式匹配; 匹配模式可以以( /
)开头防止递归;匹配模式可以以( /
)结尾指定目录;要忽略指定模式以外的文件或目录,可以在模式前加( !
)表示取反;
.gitignore
文件作为示例:2.9.移除文件
从暂存区删除,并且从工作目录删除源文件:
从暂存区删除,保留工作区的源文件:
思维导图使用『幕布』绘制
1.查看提交历史
提交的SHA-1校验和; 提交的作者信息; 提交时间; 提交说明;
git log
输出的是完整的提交信息记录,如果提交次数非常多时会显得非常的复杂,所以该命令设计了丰富的选项供我们控制输出,最常用的如下:2.版本前进回退(基于索引值操作)
HEAD指针
。2.1.版本回退
2.2.版本前进
2.3.reset的三个参数区别
思维导图使用『幕布』绘制
1.什么是分支
2.分支的好处
并行推进多个功能的开发,提高开发效率; 各个分支在开发过程中是独立的,一个分支的失败不会对其他分支产生任何影响; 分支开发失败后可重新开始;
3.分支的操作
3.1.创建分支
3.2.查看分支
3.3.切换分支
3.4.切换分支后的操作
3.5.合并分支
切换到要合并的分支上; 执行命令:
4.解决合并分支后产生的冲突
4.1.冲突的产生
4.2.冲突的解决
MERGING
字样:手动修改文件,并删除Git添加的多余符号: 手动修改文件到满意的程度; 添加修改到暂存区 git add <文件名>
;提交更新 git commit -m <提交信息>
:
思维导图使用『幕布』绘制
1. 代码托管中心
在局域网环境下,可以在公有的服务器上使用Gitlab搭建一个代码托管中心; 在外网环境下,可以使用Github或者码云这样的第三方代码托管中心。
2. Github
3. Git和Github联合操作
3.1.创建本地库
3.2.创建远程库
New repository
来创建一个新的远程库:3.3. 给远程库地址取别名
origin
,后续我们就不需要输入冗长的地址了,直接使用origin代替即可:3.4.拉取操作(远程库 -> 本地库)
3.5.推送操作(本地库->远程库)
4.克隆(拉取)远程库
除了这种方式外,还有一种简便的方式——克隆远程库,使用命令:
将远程仓库的所有内容克隆到本地(避免了拉取操作); 默认创建了origin作为远程仓库地址的别名(避免了取别名的操作); 初始化了本地库(避免了初始化操作);
思维导图使用『幕布』绘制
0.准备工作
要学习如何在Github上进行团队协作,请注册一个另外的Github账号,方便学习。
mculover666-2
1768391279@qq.com
1.协作者将远程仓库克隆到本地
首先,团队的合作者需要将仓库克隆到本地,在上一篇文章中讲述了克隆的好处,这里再次说明:
完成本地库初始化操作; 默认将远程库地址别名设置为 origin
;默认将远程库的所有内容拉取到本地;
mculover666
的,这里虚拟机中的mculvoer666-2
成员没有权限去修改这个远程仓库,所以操作被禁止。2.邀请团队成员(协作者)加入
2.1.远程库所有者发送邀请
邀请团队成员加入需要在Github上完成:
邀请链接
,发送给被邀请者;2.2.接受邀请
被邀请者收到的邮件信息如下:
3.拉取最新更改
这里mculover666-2
向远程库提交了更改,mculover666
需要将此次修改拉取下来,更新到本地,直接使用拉取命令即可:
4. 团队协作时需要注意的冲突
在团队中所有的协作者同时工作时,会发生两种冲突:
思维导图使用『幕布』绘制
0.什么是跨团队协作和pr
在上一篇文章中讲述了如何邀请团队的协作者,同一个团队中的人同时协作,但是Github的优势在于可以跨团队协作,即:开发者不需要加入团队也可以贡献代码,称之为跨团队协作。
开发者Fork一份远程仓库到自己的仓库中 在自己的仓库进行修改,提交更新 更新完毕提交pr(pull request) 项目拥有者审核代码 项目拥有者合并代码
1.开发者Fork仓库
首先你需要再注册一个新的Github账号,如果已经在上一篇文章中将新的账号设为协作者,需要先从协作者中去除。
2.开发者进行修改,提交更新,推送
开发者Fork了仓库后,便可以在自己的本地库和远程库之间进行操作,比如提交更新,推送,拉取等等操作。
将新的仓库克隆到本地; 进行修改 提交更新 推送到远程库
3.开发者提交请求(PR)
开发者在自己的仓库修改完毕后,需要将自己的修改提交到原本的仓库,这个时候就需要进行PR操作,即pull request
,提交请求:
4. 仓库拥有者审核代码,合并代码
5.拉取最新版本,为下一次推送做好准备
将Github上的最新版本拉取到本地,为下一次的推送做好准备:
0. 使用VS Code进行Git可视化操作
已经安装了VScode并且了解其使用 电脑上必须安装了Git并且你了解Git的常用命令行操作
1.设置git.path
git.path
,否则打开Git存储库(如果是普通文件夹,请先使用git init
初始化为Git仓库)会出现如下提示:使用 Ctrl+Shift+P
打开命令面板,输入setting
,选择首选项:打开设置(json)
:添加 git.path
一项,目录为当前电脑上git.exe
所在目录,如图:保存,重新用VS Code打开Git存储库:
2.本地库基本操作
2.1.修改文件
test.c
文件,并添加一段代码,可以看到VS Code会自动显示出更改:2.2.暂存修改
git add <文件名>
,但在VS Code中,可以以图形化方式操作,并且可以清楚到当前暂存区和修改区的内容:2.3.提交更新到本地库
git commit -m <提交信息>
,在VS Code中,可以以图形化方式操作:3.安装Git扩展添加更多功能
git-extension-pack
这个扩展:git
,选择该扩展,安装:3.1.查看提交历史
3.2.随时查看当前内容的状态
3.3.随时查看仓库状态
3.4.查看文件差异
3.5. 切换当前分支
3.6. 查看分支之间的差异和合并分支
git merge
:4.远程库操作
4.1.在Github上新建一个远程库
4.2.添加远程库
Ctrl+Shift+P
打开命令面板,输入git add
,选择添加远程库
:4.3.推送内容到远程库
5.更多Git操作
Ctrl+Shift+P
打开命令面板,输入git
即可看到所有,有兴趣的小伙伴可以自己尝试一下: