更多内容请查看android生态之应用篇
我下面有空的话会一一从android生态之应用篇一文中的学习路线来写博客,不仅仅是对之前的学习的回顾,也是对自己意志的磨砺。首先要说的是版本控制。版本控制常用的几种为git,svn,个人项目使用腾讯工蜂以及CODING,开源项目使用github。
git,svn操作和功能大体相同,这边以github使用为例,从git原理,初始化,上传,下载,合并,恢复,以及一些注意事项说明,如果想详细学习git这边建议可以阅读《ProGit》。
四个区域分别是工作区域,暂存区域,本地仓区域,远程仓区域。
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哈希串值等。
git add .
git commit -m "commit msg"
git push origin branchname
git checkout -b dev //新建本地为dev的分支并切换至dev分支
git push origin dev:dev //将本地dev分支推送至远程dev分支
git checkout dev
git push origin :dev//将一个空分支推送到远程即为删除
多行注释可以通过单引号’ '来换行,如下所示:
git commit -m '
1.line one
2.line two
'
单行注释一般用双引号",如下所示:
git commit -m "commit msg"
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分支创建一个记录合并结果的新节点,该节点带有用户描述合并变化的信息。
AOSP:本质上是一堆使用git进行版本控制的project。
repo:针对AOSP大量git仓库的管理工具。可以执行批量git同步,更新,提交等操作。
原理:通过读取manifest.git里维护的manifests.xml文件当中配置的projects的git仓库地址,分支等信息执行git操作。将服务器上按照特定目录结构保存的project原封不动的同步到本地。
关系:repo基于git,让超大型的项目代码管理更有效率。
通常使用git容易出现问题的是上传的时候产生冲突问题,有冲突则消灭冲突,还有就是记得commit之后一定要push,我有遇到不push的同学导致我这边集成失败的。还有开发的时候一定要重视版本控制,一个版本发布之后要打一个tag,这样的话可以方便后面追踪问题。还有需要提一下的就是一般一个项目会存在两个分支,一个master,另外一个为dev分支,master为稳定分支,dev为开发分支,当dev上测试通过之后会合入到master分支上,并且需要一个专门的人审核提交。