树莓派使用Git

陈拓 [email protected] 2020/03/06-2020/03/08

0. 概述

Gitee和GitHub都是基于Git的代码管理平台。

Github是国外的,Gitee是国内的。

Gitee和GitHub都要用Git命令操作。

要使用Git命令先要在电脑上安装Git工具软件。

下面在树莓派上以Gitee为例演示Git的基本操作。

1. 安装git

在电脑上用putty登录树莓派,如果不熟悉请看《电脑连接树莓派3B+》
https://blog.csdn.net/chentuo2000/article/details/103332186

  • 测试git --version

如果没有安装。

  • 安装git

sudo apt-get install git

2. 在码云gitee上创建一个仓库

https://gitee.com/chentuo2000/My-ESP8266

3. Git 全局设置

  • 用户名

告诉git你的名字,这个名字会出现在你的提交记录中。

git config --global user.name "chentuo"

  • Email

然后是你的Email,同样,这个Email也会出现在你的提交记录中,请尽量保持此Email和您的码云的注册Email一致。

git config --global user.email "[email protected]"

  • 查看全局设置

ls -la

全局设置保存在.gitconfig中,查看全局设置cat .gitconfig。

4. Git 基本操作

4.1 clone

把我在gitee上创建的仓库克隆到本地。

git clone https://gitee.com/chentuo2000/My-ESP8266.git

 

ls –l

cd My-ESP8266/

这个目录和普通的目录有什么不同呢?ls –la

它比普通的目录多了一个.git目录,里面存放仓库信息。

4.2 pull

在云端创建一个子目录tarballs,用git pull命令同步到本地仓库。

git pull

4.3 push

往本地目录tarballs中复制一个文件。

cp esp/esp-open-sdk/./crosstool-NG/.build/tarballs/binutils-2.25.1.tar.gz My-ESP8266/tarballs/

cd My-ESP8266/

  • git status

命令用于查看项目的当前状态。

  • git add

命令将该文件添加到缓存。

git add tarballs/binutils-2.25.1.tar.gz

再看看状态的变化,状态命令加-sb参数,以获得简短的结果输出。

git status -sb

绿色的A表示Add成功。

  • git commit

然后使用git commit -m "注释"命令将add过的内容提交到本地仓库,并添加一些注释信息,方便阅读。

git commit -m "编译esp-open-sdk的依赖库"

再看看状态:

git status -sb

git status

提示:在主分区,1个提交的分支前缀是origin/master,使用git push发布本地提交。

工作树已经清空了。

  • git push

同步云端仓库git push

  • 查看状态

git status

git status -sb

上传完成,没有提交的文件了,工作树清空。

  • 看看云端

5. 多文件上传

注意:一次上传有100MB的限制。

5.1工作区,缓存区,本地仓库区,云端仓库

工作区就是上面我们git clone下来的整个项目目录My-ESP8266。

缓存区是一个隐藏的区域,用git add添加。

本地仓库也是隐藏的,用git commit命令将缓存区的文件提交到本地仓库。

用git push将本地仓库同步到云端。

5.2 git add多个文件

上传文件列表ls -l tarballs/

  • 添加多个文件到缓存

git add file_1 file_2 file_3

多个文件用 空格 隔开。

文件比较多时可以使用通配符*添加所需要的文件。

也可以整个目录add,像这样:git add . 意思是把当前目录(.表示当前目录)里面的变动都加到缓存。

或者用git add tarballs/g*将目录tarballs中以g开头的文件添加到缓存。

或者像下面。

  • 添加目录tarballs到缓存

git add tarballs

git status

git status –sb

看看目录

可以看到,只添加了新文件,之前我们上传过的文件binutils-2.25.1.tar.gz,因为没有变化,所以并没有添加到缓存。

  • git reset HEAD

用use git reset HEAD <file>命令可以从缓存移除文件。例如:

git reset HEAD tarballs/cloog-0.18.4.tar.gz

git status

git status -sb

可以看到tarballs/cloog-0.18.4.tar.gz已经从缓存中移除了。

git reset命令中的HEAD指向当前我们所在版本库,是一个地址指针的头。

看看日志git log

有3个commit,每个commit对应一个指针:

e07cfbf37e2af1fc1ded1b196178b0231e88a9c4

2eae215d0213343fa07f66a5d1116e24ae2f8406

d9c752f40aa055831eefa02b36b5e928c7fca155

再看看简短日志git log –oneline(一条提交信息用一行显示)

e07cfbf、2eae215、d9c752f是3个指针地址的头,HEAR当前指向master地址的头e07cfbf

所以下面两句作用是一样的。

git reset HEAD tarballs/cloog-0.18.4.tar.gz

git reset e07cfbf tarballs/cloog-0.18.4.tar.gz

例如:

git reset e07cfbf tarballs/expat-2.1.0.tar.gz

git status -sb

缓存清空了,有2个未操作的新文件。

之前我们上传过的文件binutils-2.25.1.tar.gz有问题,重新下载,和之前比较大小有变化:

添加目录tarballs到缓存

git add tarballs

看看状态:

tarballs/binutils-2.25.1.tar.gz是修改过Modified的文件

tarballs/cloog-0.18.4.tar.gz

tarballs/expat-2.1.0.tar.gz

是新Add的文件,也就是没有和云端同步过的文件。

5.3 git commit多个文件

git commit -m '提交多个文件'

看状态:

可以用git commit --amend打开编辑器修改。

如果想撤回,可以用:

git reset --soft撤回git commit –m

git reset --mix撤回git commit –m和git add

git reset –-hard回退git commit –m、git add和工作区

5.4 git push多个文件

同步云端仓库git push

  • 看状态

  • 看云端仓库

5.5 回退

Your branch is ahead of 'origin/master' by 2 commits.

这表示在你之前已经有2个commit而没有push到远程分支上,所以需要先git push origin **将本地分支提到远程仓库。

如果不想同步云端,也可以用git reset --hard HEAD~x取消,这里的x表示的就是在这之前已经有多少次的提交,这句命令的意思就是直接回退到x 个commit之前

注意:这两次提交所改动的代码文件都没有了,慎用!

在我们这里:

git reset --hard HEAD~2

git status

git status -sb

缓存已经清空了,目录中相关的文件也删除了。

6. 在本地创建一个仓库

在上面的操作中我们先在gitee上创建仓库,再克隆到本地。如果我们在本地已经有了一个项目目录要上传的gitee上,可以像下面这样操作。

  • 创建本地仓库

mkdir My-ESP32

cd My-ESP32

git init

git init的功能就是将本地目录初始化为本地仓库。

查看目录ls –la

多了一个隐藏目录.git

查看状态git status

  • 创建一个文件

touch README.md

nano README.md

写一些内容,保存,退出。

查看状态git status

git status –sb

?? README.md是一个新文件。

  • git add README.md

查看状态:

  • git commit -m "first commit"

查看状态:

  • 创建云端仓库

  • 关联本地仓库和云端仓库

git remote add origin https://gitee.com/chentuo2000/My-ESP32.git

执行完这个命令在本地的.git/config中写了远程信息[remote "origin"]

Origin是Git默认的远程仓库名字,也可以改成别的名字,但最好是遵从习惯,这样你一看到origin就知道是远程仓库。

  • 同步云端仓库

git push -u origin master

master是默认的本地分支,origin/master是默认远程分支origin/master。

查看云端仓库:

7. 分支

7.1 默认分支

Origin默认远程服务器

origin/master默认远程分支

master默认本地分支

7.2 分支的用途

  • 多人开发时

为了不受其他开发人员的影响,每个人可以在主分支上建立自己的专属分支,自己的开发工作完成后可以将自己分支上的工作合并到主分支。

因为每一次提交的历史记录都会被保存,所以当发生问题时,定位和修改造成问题的提交就容易多了。

Git分支是由指针管理的,所以创建、切换、合并、删除分支都非常快,非常适合大型项目的开发。

主分支(默认创建的Master分支)只用来发布重大版本(对于每个版本可以创建不同的标签,以便于查找),日常开发应该在另一条分支上进行。

  • 多种方案时

例如,在一个项目的进行中,你遇到了一个问题,解决方案不确定,但是你不希望因此影响到当前的开发,那么你可以为此创建一个分支,分支包含目前主干上的所有内容,然后在分支上测试你的方案,而丝毫不影响主干的进行;如果可行那么可以通过合并分支功能将你的更新应用到主干,反之你可以放弃它。

7.3 分支操作

  • 查看分支

1) 查看本地分支git branch

2) 查看远程分支git branch –-r

3) 查看所有分支git branch –-all

分支前有一个 * 号代表当前分支。

  • 创建并切换分支

1) 创建分支:git branch <分支名称>

2) 切换分支:git checkout <分支名称>

3) 创建并切换分支:git checkout -b <分支名称>

  • 合并分支

1) 先切换到master分支:git checkout master

2) 再将分支的代码合并到master:git merge <分支名称>

在合并分支的时候如果代码会有冲突,需要自己去处理这些冲突。

  • 删除分支

1) 删除本地分支:git branch -d <分支名称>

2) 删除远程分支:git push origin <分支名称>

  • 恢复分支

误删的分支可以恢复。

1) 使用git log查出分支的提交号

2) git branch <分支名称> <提交号>

即创建提交号历史版本的一个分支,分支名称随意。

  • 查询分支

1) 查询分支:git log

2) 查询分支简短显示:git log –oneline

3) 查看分支图:git log --graph

可以带参数:

git log --graph --pretty=oneline --abbrev-commit

  • 重命名分支

git branch -m <当前分支名> <新的分支名>

 

其他的用法请看后面的参考文档。

参考文档

  1. Git官方文档
    https://git-scm.com/book/zh/v2
  2. Gitee官方文档
    https://gitee.com/oschina/git-osc/wikis/%E5%B8%AE%E5%8A%A9
  3. git操作手册
    https://www.jianshu.com/p/05a22c6a4131
  4. gitee 命令集合
    https://www.cnblogs.com/TF511/articles/10645857.html
  5. Git使用教程---以Gitee码云为例
    https://www.jianshu.com/p/a146bd847a8d
  6. git分支
    https://blog.csdn.net/qq_36672905/article/details/82776293?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章