嵌入式开发Git使用
Git简介
1、git中文件有三种状态:
- 已提交(committed):表示数据已经安全的保存在本地数据库中;
- 已修改(modified):表示修改了文件,但还没保存到数据库中;
- 已暂存(staged):对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中;
2、对应三种状态,git的三个工作区域:
- Git 仓库:Git用来保存项目的元数据和对象数据库的地方;
- 工作目录:对项目的某个版本独立提取出来的内容;
- 暂存区域:保存了下次将提交的文件列表信息;
在这三个工作区域的基础上,GIT的基本工作流程如下:
1)在工作目录中修改文件;
2)暂存文件,将文件的快照放入暂存区域;
3)提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录;
3、在Linux环境下安装GIT
sudo apt-get install git
4、初次运行git前的配置–设置用户名和邮箱
git config --global user.name “<git用户名>”
git config --global user.email <git用户邮箱>
Git本地库操作
1、获取Git仓库
- 方法1:
在Git Bash中进入工作目录或者直接在工作目录右击,选择Git Bash Here打开Git命令行;
使用命令初始化仓库:
git init
本地仓库初始化成功后,Git会在当前目录新建一个.git的隐藏文件夹,该文件夹中包含了初始化的Git仓库中所有的必须文件。
- 方法2:克隆(拉去)现有的仓库到本地
克隆远程仓库的命令格式:
git clone <url>
如果想在克隆的时候自定义仓库的名字,格式如下:
git clone <url> <new repository name>
2、提交更新到仓库
在当前工作目录下,Git对一个文件的状态有两种:
- 已跟踪:在上次提交的快照中有记录,已被纳入版本管理(获取仓库时,工作目录下所有的文件都是已经跟踪文件)
- 未跟踪:除已跟踪文件之外的所有文件都属于未跟踪文件;
1)查看文件当前状态
git status
当文件数量多时可以使用-s参数输出简短信息:
git status -s
2)跟踪新文件
git add <文件名或者目录>
文件名支持通配符(比如
.c表示工作区所有c文件);
如果是目录,则递归跟踪该目录下所有文件;
使用-A参数表示跟踪所有文件:
git add -A
3)修改当前文件
4)暂存已修改文件
已跟踪文件修改后查看状态,会提示Changes not staged for commit,
这表明文件修改后没有保存到暂存区,使用如下命令将修改保存到暂存区:
git add <文件名> git add -A
5)查看未暂存和已暂存的修改
在工作区工作的时候,我们想要知道:
当前做的哪些更新没有暂存?
有哪些更新已经暂存起来准备下次提交?
使用git status命令只能表明文件,要查看具体内容使用该命令:
git diff
该命令比较工作目录中和暂存区文件的差异,即:已经修改但还未暂存的内容,最后通过文件补丁的格式表明具体哪些行发生了变化。
如果需要查看已经暂存起来的修改使用如下命令:
git diff --staged
6)提交更新
注:提交操作前请确保已设置用户名和邮箱。
使用如下命令将暂存区的内容提交到仓库:
git commit
该命令只会将暂存区的内容提交到仓库,所以在提交之前需要使用git status查看,确认所有改变已经暂存。
该命令执行后会自动调用默认编辑器vim来编辑提交信息,之后保存即可成功提交。
如果提交信息比较简单,可以直接一行搞定:
git commit -m "<提交信息>"
每次提交都是对该项目的一个快照,在以后的任何时候都可以回退到该次状态。
7)跳过暂存区域直接提交更新
先将工作区的内容提交到暂存区,然后将暂存区的内容提交到仓库,这样的过程未免过于繁琐,使用如下命令可以跳过暂存区,直接将工作区修改的文件(未追踪的文件不能直接提交)添加到仓库:
git commit -a -m "<提交信息>"
8)忽略文件
一般情况下,我们总会有些文件不需要纳入Git 的管理,比如:编译生成的中间文件、临时文件、可执行文件等等;日志文件。。。
解决方法:在工作目录下创建一个名为.gitignore的文件来列出忽略文件的模式。
文件.gitignore的格式规范如下:
所有空行或者以#开头的行会被Git忽略;
可以使用标准的glob模式匹配;
匹配模式可以以(/)开头防止递归;
匹配模式可以以(/)结尾指定目录;
要忽略指定模式以外的文件或目录,可以在模式前加(!)表示取反;
9)移除文件
要从Git的暂存区和仓库中移除一个文件,有两种情况:
- 从暂存区删除,并且从工作目录删除源文件:
git rm <文件名>
- 从暂存区删除,保留工作区的源文件:
git rm --cached <文件名>
Git本地库操作
1、查看提交历史
在提交了很多次修改之后,我们可以使用如下命令回顾提交历史:
git log
该命令默认会按照提交时间列出所有提交(最新一次提交在最上面),并且列出四个基本提交信息:
- 提交的SHA-1校验和;
- 提交的作者信息;
- 提交时间;
- 提交说明;
git log输出的是完整的提交信息记录,如果提交次数非常多时会显得非常的复杂,所以该命令设计了丰富的选项供我们控制输出,最常用的如下:
2、版本前进回退
Git版本前进回退的本质是移动HEAD指针:
1)版本回退
版本回退使用命令:
git reset --hard <索引值>
2)版本前进
版本前进也使用相同的命令:
git reset --hard <索引值>
3)reset的三个参数区别
参数 | 说明 |
---|---|
soft | 仅仅移动本地库HEAD指针 |
mixed | 移动本地库HEAD指针,重置暂存区 |
hard | 移动本地库HEAD指针,重置暂存区,重置工作区 |
Git本地库操作(分支管理)
1、什么是分支
在版本控制过程中,使用多条线同时推进多个任务,每一条线就叫做一个Git分支;
2、分支好处
- 并行推进多个功能的开发,提高开发效率;
- 各个分支在开发过程中是独立的,一个分支的失败不会对其他分支产生任何影响;
- 分支开发失败后可重新开始;
3、分支的操作
1)创建分支
创建分支使用命令:
git branch <分支名称>
2)查看分支
查看当前所有的分支信息使用命令:
git branch -v
3)切换分支
切换分支使用命令:
git checkout <分支名>
4)切换分支后的操作
切换分支后可以进行Git的基本操作,比如追踪文件,添加内容到暂存区,提交到本地库等等。
5)合并分支
要将一个分支所做的更新合并,需要进行两个操作:
1、切换到要合并的分支上;
2、执行命令:
git merge <待合并的分支名称>
4、解决合并分支后产生的冲突
1)冲突的产生
当我们在不同的分支上修改了同一文件的同一个地方的内容,在两者同时合并到主分支上时会产生冲突,合并时会提示自动合并失败,进入手动合并模式;
2)冲突的解决
当自动合并失败,Git进入手动模式后,命令行后会显示 MERGING字样;
在手动合并模式下,需要进行以下操作:
1、手动修改文件,并删除Git添加的多余符号:
2、手动修改文件到满意的程度;
3、添加修改到暂存区git add <文件名>;
4、提交更新git commit -m <提交信息>
Github远程库操作(创建、拉取、推送、克隆)
1、代码托管中心
Git不仅可以在本地使用本地库,还可以将本地库与远程库产生关联,代码托管中心就是用来维护远程库的。
- 在局域网环境下,可以在公有的服务器上使用Gitlab搭建一个代码托管中心;
- 在外网环境下,可以使用Github或者码云这样的第三方代码托管中心。
2、Github
GitHub(https://github.com)就是典型的第三方代码托管中心,于2008年4月10日正式上线,目前在2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台GitHub。
因为Github只支持Git 作为唯一的版本库格式进行托管,故名GitHub,另外,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、 在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。
首次访问Github官网时会默认打开注册页面,直接使用邮箱注册即可。
3、Git和Github联合操作
1)创建本地库创建本地库
创建一个空的本地库用来测试远程库:
2)创建远程库
在Github首页的右上角,如图,选择New repository来创建一个新的远程库:
3)给远程库地址取别名
远程库地址可以在Github上看到,因为Git支持多种协议,包含HTTPS和SSH,所以选择这两种的任何一种都是可以的:
Git根据这个远程库地址进行推送和拉取操作,但是每个命令都得带上这个地址显得太麻烦了,所以可以先在Git中给这个地址取个别名,使用命令:
git remote add <别名> <远程库地址>
比如在这里将远程库地址取个别名叫origin,后续我们就不需要输入冗长的地址了,直接使用origin代替即可:
4)拉取操作(远程库 -> 本地库)
特别注意:
如果远程库有更新(比如在新建的时候创建了README文件),不能进行推送,必须先进行拉取操作。
首先将远程库中的内容拉取下来,同步到本地库,使用命令:
git pull <远程库地址名> <远程分支名称>
在文件夹可以看到远程库的内容被拉取到本地文件夹:
5)推送操作(本地库->远程库)
使用如下命令进行推送操作,将本地库的内容推送到远程库中:
git push <远程库地址/别名> <要推送信息的分支(本地)>
这里首先在本地库创建一个HelloWorld程序的C文件,然后提交一次更新:
然后向远程库进行推送:
git push origin master
首次推送时Github会验证身份,自动弹出Github登录框,登录即可:
4、克隆(拉取)远程库
除了这种方式外,还有一种简便的方式——克隆远程库,使用命令:
git clone <远程库url>
先在Github上新建一个远程仓库,然后克隆到本地
这样克隆的效果有(重点):
将远程仓库的所有内容克隆到本地(避免了拉取操作);
默认创建了origin作为远程仓库地址的别名(避免了取别名的操作);
初始化了本地库(避免了初始化操作);
克隆成功后可以直接进行拉取和推送操作;