浅谈android应用之Git

文章目录

  • 1. 前言
  • 2. git
  • 3. 原理
    • 3.1 四个区域
    • 3.2 四个状态
  • 4. 目录结构
  • 5. 常见命令
  • 6. 一次完整提交
  • 7. 新建远程分支
  • 8. 删除远程分支
  • 9. commit msg
  • 10. 合并分支过程
  • 11. repo与git
  • 12. 其他

1. 前言

更多内容请查看android生态之应用篇

我下面有空的话会一一从android生态之应用篇一文中的学习路线来写博客,不仅仅是对之前的学习的回顾,也是对自己意志的磨砺。首先要说的是版本控制。版本控制常用的几种为git,svn,个人项目使用腾讯工蜂以及CODING,开源项目使用github。

2. git

git,svn操作和功能大体相同,这边以github使用为例,从git原理,初始化,上传,下载,合并,恢复,以及一些注意事项说明,如果想详细学习git这边建议可以阅读《ProGit》。

3. 原理

3.1 四个区域

四个区域分别是工作区域,暂存区域,本地仓区域,远程仓区域。

3.2 四个状态

1、已修改 --> Git 的工作目录
浅谈android应用之Git_第1张图片

2、已暂存 -->暂存区域
浅谈android应用之Git_第2张图片

3、已提交本地 -->本地仓库
浅谈android应用之Git_第3张图片

4、已提交远程 -->远程仓库
浅谈android应用之Git_第4张图片

4. 目录结构

branches/ # 新版的Git已经不再使用这个目录,所以大家看到它 #一般会是空的

hooks/ # 默认的“hooks” 脚本文件

info/ # 里面有一个exclude文件,指定本项目要忽略的文件 #,看一下这里

logs/ # 各个refs的历史信息

objects/ # 这个目录非常重要,里面存储都是Git的数据对象。包括:提交(commits), 树对象(trees),二进制对象 #(blobs),标签对象(tags)。

refs/ # 标识着你的每个分支指向哪个提交(commit)。所有分支的命名信息保存在“.git/refs/heads”中

COMMIT_EDITMSG # 保存着上一次提交时的注释信息

config # 项目的配置信息

description # 项目的描述信息

HEAD # 项目当前在哪个分支的信息。cat HEAD回显ref: refs/heads/master,说明当前是master分支

index # 索引文件,git add 把要添加的项暂存到这里,暂存区也叫索引文件,是一个在你的工作目录(working tree)和项目仓库间的暂存区域(staging area),索引是一个二进制格式的文件,里面存放了与当前暂存内容相关的信息,包括暂存的文件名、文件内容的SHA1哈希串值等。

5. 常见命令

  1. git branch
    查看现在工作所在分支
  2. git branch -a
    查看所有远程分支与工作分支
  3. git fetch
    同步所有分支信息
  4. git diff
    比较修改
  5. git status
    查看本地修改,只能查看修改的文件,如果想要查看修改详情的话需要使用git diff
  6. git checkout branchname
    切换分支的利器
  7. git checkout .
    撤销工作区间所有修改
  8. git reset
    git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
    git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
    git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,此命令 慎用!
    基于本地的修改,不影响远程仓库
  9. git revert
    git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
    作为一次最新的提交
    • git revert HEAD 撤销前一次 commit
    • git revert HEAD^ 撤销前前一次 commit
    • git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
      git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去
      直接操作远程仓库
  10. git pull
    等同于git fetch+git merge
  11. git log
    查看提交日志

6. 一次完整提交

git add .
git commit -m "commit msg"
git push origin branchname

7. 新建远程分支

git checkout -b dev  //新建本地为dev的分支并切换至dev分支
git push origin dev:dev  //将本地dev分支推送至远程dev分支

8. 删除远程分支

git checkout dev
git push origin :dev//将一个空分支推送到远程即为删除

9. commit msg

多行注释可以通过单引号’ '来换行,如下所示:

git commit -m '
1.line one
2.line two
'

单行注释一般用双引号",如下所示:

git commit -m "commit msg"

10. 合并分支过程

git checkout master  //切分到master分支
git merge dev          //将指向master分支的指针重定向到dev分支,达到master分支合并dev分支的效果

注意:
–no-ff:强行关闭fast-forward方式,并产生新的提交 不需要commit,直接push
–ff:使用fast-forward,不会产生新的commit不需要commit,直接push
–squash:使用squash方式合并,把多次分支commit历史压缩为一次。需要commit后push

merge原理:
那么git merge dev 命令将会把在master分支上二者共同的节点(E节点)之后分离的节点(即dev分支的A B C节点)重现在master分支上,直到dev分支当前的commit节点(C节点),并位于master分支的顶部。并且沿着master分支和topic分支创建一个记录合并结果的新节点,该节点带有用户描述合并变化的信息。

11. repo与git

AOSP:本质上是一堆使用git进行版本控制的project。
repo:针对AOSP大量git仓库的管理工具。可以执行批量git同步,更新,提交等操作。
原理:通过读取manifest.git里维护的manifests.xml文件当中配置的projects的git仓库地址,分支等信息执行git操作。将服务器上按照特定目录结构保存的project原封不动的同步到本地。
关系:repo基于git,让超大型的项目代码管理更有效率。

12. 其他

通常使用git容易出现问题的是上传的时候产生冲突问题,有冲突则消灭冲突,还有就是记得commit之后一定要push,我有遇到不push的同学导致我这边集成失败的。还有开发的时候一定要重视版本控制,一个版本发布之后要打一个tag,这样的话可以方便后面追踪问题。还有需要提一下的就是一般一个项目会存在两个分支,一个master,另外一个为dev分支,master为稳定分支,dev为开发分支,当dev上测试通过之后会合入到master分支上,并且需要一个专门的人审核提交。

你可能感兴趣的:(android应用学习轨迹)