嵌入式开发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作为远程仓库地址的别名(避免了取别名的操作);
初始化了本地库(避免了初始化操作);
克隆成功后可以直接进行拉取和推送操作;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值