git是目前世界上使用最广泛的分布式版本控制系统,由大名鼎鼎的Linus花了两周时间写成,同时在2008年使用给git作为唯一版本库格式托管平台gitHub网站上线,已有众多知名开源项目迁移至github。
git是分布式版本控制系统,与之对应的是集中式版本控制。分布式和集中式最大的不同,分布式并不是提取最新版本的文件快照,而是把代码仓库完整的克隆下来。每一次克隆操作都是对代码仓库的完整备份。所以,如果代码仓库的服务器发生故障,都可以用任何一个本地镜像仓库恢复,整个项目的历史记录都不会丢失。同时Git拥有完善的分支管理系统,可以指定与多个远程代码仓库交互协作开发。
git已经成为软件开发者必须会的技能之一,正确熟练的使用git对团队合作、提高工作效率都是有很大帮助的。很多公司包括硬件工程师都必须要熟练使用git,何况软件工程师呢!
基于git的托管平台除了github还有很多,国内免费也有很多,如码云中国(https://gitee.com);Coding(https://coding.net),国内的git平台下载速度都比较快,也支持一定数量的免费私有项目。
同时git拥有GitHub for Desktop、Source Tree等众多优秀且功能强大的图形化客户端工具。不过本篇主要讲解git命令行操作,因为只有在命令行模式下才能了解学习git的所有命令,这样操作GUI工具也不会存在困难。同时我推荐在熟练使用git后可通过命令行与GUI配合使用的方式提高工作效率。
git项目分为三个工作区域:工作目录、暂存区域、本地仓库及git仓库。其中:
Workspace:工作目录,存放从git仓库的压缩数据库中提取出来的文件,存放在本地磁盘上可修改。
Index:暂存区域,存放的是一个文件,保存了下次将要提交的文件列表信息。
Repository:本地仓库。
Remote:远程仓库,是Git用来保存项目的元数据和对象数据的地方。
git基本工作流程:
1.在工作目录中修改文件
2.暂时文件,将文件的快照放入暂存区域。
3.提交更新,找到暂时区域的文件,将快照永久性的存储到git仓库目录
一、Git安装与配置
1)安装:
Ubuntu系统默认没有安装Git,可通过sudo apt-get install git安装。
Windows下有很多支持Git的图形化工具,推荐安装SourceTree。
2)git配置:
git的配置文件为.gitconfig,它可以在用户主目录下,用于全局配置;也可以在项目的目录下,用于项目配置。所有操作如果添加了--global就是对全局配置文件操作;不加--global同时在项目目录下操作就是操作项目配置文件。
查看git配置信息:git config [--global] --list
编辑git配置文件:git config -e [--global]
修改git默认编辑器:git config [--global] core.editor vi
长期存储密码:git config [-- global] credential.helper store
查看所有账户git config --get-all user.name
设置用户名:git config [--global] user.name
设置邮箱:git config [--global] user.email
二、基本操作1.git init
初始化本地仓库,在当前目录下生成.git目录,该目录为仓库,而当前目录为工作空间。
2.查看信息
查看本地文件夹所有修改的文件
git status
查看当前分支的版本历史
git log
查看暂存区与工作区的差异
git diff
3.git add
添加指定文件到暂存区:
git add ...
添加指定目录到暂存区:
git add
添加当前目录下的所有文件:
git add .
4.git rm
删除工作区文件,且将这次删除放入暂存区
git rm ...
停止跟踪指定文件,但该文件会保留在工作区
git rm --cached
5.git commit
提交暂存区的文件到本地仓库
git commit -m“commit log”
提交暂存区的指定文件到本地仓库
git commit ... -m“commit log”
提交工作区自上次commit之后的变化至仓库区,无需git add
git commit -a
提交时显示所有修改信息
git commit -v
6.git clone
从远程主机克隆一个版本库,该命令会在本地主机生成一个目录,与远程主机的版本库同名。
git clone
示例:git clone https://github.com/espressif/ESP8266_RTOS_SDK
如需指定不同的目录名,可以将目录名作为git clone命令的第二个参数。
git clone
示例:git clone https://github.com/espressif/ESP8266_RTOS_SDK esp8266
在clone版本库的时候,使用的远程主机自动被命名为origin,如需使用其他主机名需使用-o选项。
git clone -o
示例:git clone -o esp https://github.com/espressif/ESP8266_RTOS_SDK
克隆指定分支:
git clone -b
示例:git clone -b 1.4.x https://github.com/espressif/ESP8266_RTOS_SDK
如果git仓库有子模块,可通过克隆命令一次拉取全部子模块。
git clone --recursive 。
示例:ESP32的SDK内有很多第三方开源组件作为子模块,如果不拉取全部,将导致有些功能无法正常编译。git clone --recursive https://github.com/espressif/esp-idf
7.git remote
git要求每个远程主机都必须指定一个主机名,git remote命令就用于管理主机名。
列出已经存在的所有远程主机:
git remote
查看远程主机的网址:
git remote -v
示例:当前有1台主机,主机名为origin
git remote -v
origin https://github.com/espressif/ESP8266_RTOS_SDK (fetch)
origin https://github.com/espressif/ESP8266_RTOS_SDK (push)
添加远程主机:
git remote add
示例:git remote add origin https://github.com/espressif/ESP8266_RTOS_SDK
删除远程主机:
git remote rm
示例:git remote rm origin
更改远程主机名:
git remote rename
示例:git remote rename origin esp
8.git pull
git pull用于拉取远程主机某个分支的更新,再与本地的指定分支合并。
git push :
示例:拉取origin主机的dev分支,与本地的master分支合并。git pull origin dev:master。如远程分支是与当前分支合并,则冒号后面的部分可以省略。
git会自动在本地分支与远程分支之间建立一种追踪关注。在git clone的时候,所有本地分支默认与远程主机的同名分支建立追踪关系,也就是本地的master分支自动追踪origin/master分支。
如当前分支与远程分支存在追踪关系,可省略远程分支名
示例:git pull origin
如当前分支只有一个追踪分支,可省略远程主机名
示例:git pull
9.git push
git push用于将本地分支更新,推送至远程主机,操作与git pull类同。
git push :
如果当前分支与多个主机存在追踪关系,可以使用-u选项指定一个默认主机,这样后面就不需要加任何参数直接使用git push。git push -u origin master。将本地的master分支推送到origin主机,同事指定origin为默认主机。
强制推送当前分支到远程仓库,即使有冲突;该指令要慎用。
git push --force
推送所有分支到远程仓库
git push --all
10.git branch
分支管理在git里是很有用的的一个功能。
列出所有本地分支
git branch
列出所有远程分支
git branch -r
列出所有本地和远程分支
git branch -a
新建分支,但不切换至新建的分支
git branch
新建分支,同时切换至新建的分支
git checkout -b
拉取远程分支并创建本地分支
git check -b origin/
切换到指定分支
git checkout
删除分支
git branch -d
强制删除分支
git branch -D
删除远程分支
git push --delete origin
合并指定分支到当前分支
git merge
11.文件恢复、重置
分别使用git checkout、git reset指令,使用这些操作后,很多修改的文件将被取消,需慎用。
恢复暂存区的指定文件到工作区
git checkout
恢复指定commit的指定文件到工作区
git checkout
恢复暂存区的所有文件到工作区
git checkout .
重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset
重置暂存区与工作区,与上一次commit保持一致
git reset --hard
12.git tag
列出所有tag
git tag
新建一个tag
git tag
删除本地tag
git tag -d
删除远程tag
git push origin :refs/tags/
查看tag信息
git show
提交指定tag
git push origin
提交所有tag
git push origin --tags
三、实战流程:1.新建仓库
1)初始化本地仓库:git init
2)添加文件至暂存区:
添加指定文件:git add README.md
添加所有文件:git add .
3)提交至本地仓库:
git commit -m“first commit”
4)添加远程主机:
git remote add origin https://github.com/espressif/ESP8266_RTOS_SDK
5)提交至远程主机origin的master分支下:git push -u origin master,并建立跟踪关系。以后提交更新可以直接使用git push。
2.已存在仓库
1)克隆:git clone https://github.com/espressif/ESP8266_RTOS_SDK
2)查看本地文件更新状态:git status
3)查看更新日志:git log
4)拉取更新:git pull
本文来自企鹅号 - 燕十三的嵌入式之旅媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 燕十三的嵌入式之旅媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。