0


ardupilot开发 --- git 篇

1. 一些概念

  • 工作区:就是你在电脑里能看到的目录;
  • 暂存区:stage区 或 index区。存放在 :工作区 / .git / index 文件中;
  • 版本库:本地仓库,存放在 :工作区 / .git 中在这里插入图片描述
  • 关于 HEAD - 是所有本地分支的游标(指针);- HEAD既可以指向某个分支,还可以指向某个分支的某个(次)提交;- HEAD指向谁,谁就是和当前工作区、暂存区、相关联的分支,即:对于add、checkout、commit命令去操作的分支对象!- HEAD的存在非常重要,因为它提供了对当前工作区状态的快速访问和管理;- 相关命令: git checkout branch_name命令切换分支,HEAD会指向所切换到的分支。 git checkout commit_hash命令切换到某个具体的提交,HEAD会指向该提交。
  • master和origin的关系 - master 表示本地仓库主分支(名称);- origin 是远程仓库的代指;origin 是远程Git仓库的默认名称;- origin 是远程仓库的主分支?- 例如在使用:git clone https://github.com/ArduPilot/ardupilot.git 下载远程仓库代码时,在后续的操作中,默认会将 https://github.com/ArduPilot/ardupilot.git 指向的远程仓用origin来表示!
  • 本地仓库 远程仓库的拷贝(这个说法不太准确)
  • 远程仓库 - 用于多个本地仓库的协调开发;- 用于备份本地仓库;
  • 分支 - 分支也称为“快照”- 一个分支代表一条独立的开发线; 使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作,最后还可以合并到主分支:在这里插入图片描述- 只有仓库才存在所谓分支,工作区和暂存区不存在分支的说法;本地仓库有分支,本地分支;远程仓库有分支,远程分支;- 相关命令: - 参考文献:http://rogerdudler.github.io/git-guide/index.zh.html- 在远程开好分支,本地直接拉下来; git checkout -b feature-branch origin/feature-branch //检出远程的feature-branch分支到本地- 本地开好分支,推送到远程; git checkout -b developer_gen3_new_branch_name //在本地创建分支 git push --set-upstream origin developer_gen3_new_branch_name //推送到远程- git branch + 分支名字:创建本地分支- git checkout -b <分支名> :创建并切换到新的本地分支- git checkout<分支名>: 切换到本地分支- git branch 查看当前分支- git branch -a:查看全部分支(包含本地和远程)- git branch -v:查看每一个(本地)分支的最后一次提交- git branch --merged:查看哪些(本地)分支已经合并到当前(本地)分支- git branch --no-merged : 查看哪些(本地)分支还没有合并到当前(本地)分支- git branch --no-merged master:查看当前未合并到master分支的有哪些?- git branch --merged master:查看当前已合并到master分支的有哪些?- git merge <分支名>:希望要把哪个分支合并到当前所在的分支- git branch -d [branchname]:删除本地分支- git push origin --delete [branchname]:删除远程分支

2. Git 基本命令简述

  • 参考文献:https://www.runoob.com/git/git-basic-operations.html

  • 关于工作区、暂存区、本地仓库 的操作:在这里插入图片描述
    命令说明git remote -v查看远程仓库的地址git add添加文件到暂存区git status查看仓库当前的状态,显示有变更的文件。git diff比较文件的不同,即暂存区和工作区的差异。git commit提交暂存区到本地仓库。git reset回退版本。git rm将文件从暂存区和工作区中删除。git mv移动或重命名工作区文件。git checkout分支切换。git switch更清晰地切换分支(Git 2.23 版本引入)。git restore恢复或撤销文件的更改(Git 2.23 版本引入)。

  • 关于远程仓库、本地仓库相关的操作:在这里插入图片描述
    命令说明git remote远程仓库操作git clone从远程获取代码库git clone -b 分支名 仓库地址clone 指定分支git pull下载远程代码并合并git push上传远程代码并合并git submodule update --init初始化子模块git submodule update --init --recursive下载子模块代码

  • 日志
    命令说明git log查看历史提交记录git blame 以列表形式查看指定文件的历史修改记录

  • Git 标签 https://www.runoob.com/git/git-tag.html

3. Git 服务器

4. fork 源作者更新后如何同步更新且不覆盖自己仓库的代码

5. Git 配置自定义编辑器

  • 查看当前编辑器 git config --global core.editor 执行命令后没显示则表示没配置
  • 指定一个编辑器 git config --global core.editor 编辑器名

6. 指令大全用法案例

6.1 本地

6.1.1 git remote :查看远程仓库地址origin

  • git remote -v

6.1.2 git --help :帮助

  • git --help
  • git help -a 查看所有子命令
  • git help -g 查看相关的概念
  • 向前、向后 一行: e, y
  • 输入git --help 或git subCmd --help 后出现冒号 “**:” 或 “press h for help or q to quit**” 的: 按下 e, y 进行翻页

6.1.3 git status :显示工作目录和暂存区的状态

所谓状态的包括(对于状态的详细解释)

  • 拟提交的变更 这是已经放入暂存区,准备使用 git commit 命令提交的变更。
  • 未暂存的变更 这是工作目录和暂存区快照之间存在差异的文件列表。
  • 未跟踪的文件 首次添加到目录中的文件。
  • 已忽略的文件
    实例描述git status显示工作目录和暂存区的状态。git status -s以精简的方式显示文件状态。git status --ignored显示工作目录和暂存区的状态,列出包括被忽略的文件。查看文件的具体修改详情请移步 git diffgit diff 或 git diff -stat
    git status --ignored:
    在这里插入图片描述

6.1.4 .gitignore :添加忽略文件 / 文件夹

  • git上传项目时有一些目录和文件是不需要上传的,如node_modules、package-lock.json等,容易导致他人拉取后冲突。可以使用git add xx 选择性上传文件,但很麻烦。
  • 工作目录下的 .gitignore 可以配置过滤文件、文件夹;
  • . gitignore 语法:
#忽略.idea文件夹及文件夹下文件
.idea 
#忽略以.iml结尾的文件
*.iml 
# 忽略*.o和*.a文件
 *.[oa]# 忽略*.b和*.B文件,my.b除外
*.[bB]!my.b
# 忽略dbg文件和dbg目录
dbg
# 只忽略dbg目录,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目录
dbg
!dbg/
# 只忽略当前目录下的dbg文件和目录,子目录的dbg不在忽略范围内
/dbg
  • . gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除(改变成未track状态),然后再提交: git rm -r --cached . git add . git commit -m ‘update .gitignore’

6.1.5 git diff :查看工作区、暂存区、版本库之间的差异

查看、比较被git管理的文件在工作区、暂存区和版本库之间的差异。但只针对已跟踪的文件!
四个情景下文件的差异的比较:
1)工作区和暂存区
2)工作区和版本库
3)暂存区和版本库
4)不同版本之间

  • 工作区和暂存区的差异
gitdiff  列出详细差异,e y键前进后退
gitdiff -- filename1 filename2 ...   查看多个文件在工作区和暂存区间的差异
  • 工作区和版本库的差异
gitdiff HEAD  工作区与最新版本库间的差异
gitdiff commitID  工作区与某提交版本间的差异,commitID是版本ID,git log获取版本hash
gitdiff HEAD -- filename1 filename2 ...  指定文件在工作区与最新版本库间的差异
gitdiff commitID -- filename1 filename2 ...  指定文件在工作区与某版本库间的差异
  • 暂存区和版本库间的差异
gitdiff--cached  暂存区和最新版本库(HEAD)间的差异
gitdiff--cached commitID  暂存区和指定版本间的差异
gitdiff--cached -- filename1 filename2 ...  指定文件在暂存区与最新版本库间的差异
gitdiff--cached commitID  -- filename1 filename2 ...  指定文件在暂存区与某版本库间的差异
  • 不同版本间的差异
gitdiff commit1ID commit2ID 版本1和版本2间的差异
gitdiff commit1ID commit2ID -- filename1 filename2 ...  指定文件在版本1和版本2间的差异
  • 常用的option
--stat  简洁的展示差异 
其他,如路径约束等
  • 如何获取版本hash? 上文提到的 commitID 即 hash 值;
git log : 查看详细历史记录,按提交时间倒叙排列,包含提交时间,提交作者,提交备注以及提交的hash值;
git log --pretty=oneline : 格式化log形式,每条log只有一行,只包含 完整的hash值 和 提交的备注;
git log --oneline: 格式化log形式,每条log只有一行,只包含 短hash值 和 提交的备注;

6.1.6 git add :添加文件到暂存区:

gitadd *  添加所有跟踪、未跟踪文件的更改到暂存区
gitadd.  添加所有已跟踪、未跟踪文件的更改到暂存区
gitadd-u.-u 只添加已跟踪文件的修改到暂存区
gitadd filename  指定文件
gitadd index/  指定文件夹

6.1.7 git commit :工作区或暂存区提交到版本库

# 将暂存区内容提交到版本库, 会跳进编辑器以输入提交信息git commit
# 将某些已被跟踪的文件提交到版本库(包含工作区和版本库)git commit [file1][file2][...]# 将暂存区内容提交到版本库, 无需进入编辑器输入提交信息git commit -m[message]# 跳过 git add, 将所有已被跟踪的文件更改提交到版本库git commit -am[message]# 使用一次新的commit, 替代上一次提交,如果代码没有任何新变化, 则用来改写上一次commit的提交信息git commit --amend-m[message]

6.1.8 git config :管理配置文件

  • git config --list 查看配置文件
  • git config --edit 编辑配置文件
  • git config --global core.editor 编辑器名如gedit 指定git的默认编辑器

6.2 远程

6.2.1 git pull :拉取远程分支并与本地分支合并

  • pull 前 pull后,工作区也会被更新,因此pull前最好先add和commit防止代码丢失。 pull 前 先配置一些merge的属性:
git config pull.rebase false# merge (the default strategy)git config pull.rebase true# rebasegit config pull.ff only       # fast-forward onlygit config pull.rebase false--global# 全局属性--global 
  • git pull 拉取与本地当前分支同名的远程分支,然后合并到当前本地分支,并在本地创建一个提交
  • git pull <远程主机名> <远程分支名>:<本地分支名> 如: git pull origin master:adrc-v1.0 将远程的master分支拉取并合并到本地的adrc-v1.0 如果远程某分支与当前分支合并,则冒号后面的部分可以省略
  • 合并冲突- pull后提示冲突:手动合并冲突 ~> add ~> commit ~> push ~> 检查合并是否成功 git log在这里插入图片描述- 用 git status 或 git diff --stat 或 git diff --name-only --diff-filter=U 查看冲突的文件列表- git diff --diff-filter=U 则可以看到冲突的具体内容,按e翻页- gedit 冲突文件名:手动解决冲突- git add 冲突文件 或 git add .- git commit :提交合并- git log :查看合并是否成功在这里插入图片描述

6.2.1 git push 推送本地当前分支到远程仓库

6.2.3 git clone 克隆远程仓库到本地

  • git clone 仓库地址 默认克隆master分支
  • git clone -b 分支名 仓库地址 只克隆指定分支
  • git submodule update --init --recursive 初始化并下载子模块

6.3 分支

查看、创建、切换、合并、删除

  • 在远程开好分支,本地直接拉下来; git checkout -b feature-branch origin/feature-branch //检出远程的feature-branch分支到本地
  • 本地开好分支,推送到远程; git checkout -b developer_gen3_new_branch_name //在本地创建分支 git push --set-upstream origin developer_gen3_new_branch_name //推送到远程
  • git branch + 分支名字:创建本地分支
  • git checkout -b <分支名> :创建并切换到新的本地分支
  • git checkout<分支名>: 切换到本地分支
  • git branch 查看当前分支
  • git branch -a:查看全部分支(包含本地和远程)
  • git branch -v:查看每一个(本地)分支的最后一次提交
  • git branch --merged:查看哪些(本地)分支已经合并到当前(本地)分支
  • git branch --no-merged : 查看哪些(本地)分支还没有合并到当前(本地)分支
  • git branch --no-merged master:查看当前未合并到master分支的有哪些?
  • git branch --merged master:查看当前已合并到master分支的有哪些?
  • git merge <分支名>:希望要把哪个分支合并到当前所在的分支
  • git branch -d [branchname]:删除本地分支
  • git push origin --delete [branchname]:删除远程分支

参考文献

多用方可熟练!!
https://haicoder.net/git/git-status.html
https://www.cnblogs.com/ygbh/p/17470075.html#_label3_0_2_0

标签: git Ardupilot

本文转载自: https://blog.csdn.net/weixin_43321489/article/details/134878737
版权归原作者 干了这碗汤 所有, 如有侵权,请联系我们删除。

“ardupilot开发 --- git 篇”的评论:

还没有评论