Git vs SVN
Git属于分布式,而SVN是集中式
- 在集中式的版本系统,有一个叫“中央服务器”来存放版本库,用自己电脑干活的时候,先要联网从服务器取得最新的版本,然后干完活,再将修改后的版本推送到服务器。如果中央服务器出了问题,所有人都没法干活了。
- 在分布式的版本系统,没有像集中式版本系统中的“中央服务器”,每个人的电脑都有一个本地的完整版本库,上传的只是一个版本中的change。
工作流程
一般在企业的开发中,都会有一个远程服务器来存放完整的代码。程序员可以在拉取相关的代码进行开发、维护、升级。
Repo是谷歌用Python脚本写的调用git的一个脚本,可以更加便捷的管理Git中的仓库。
repo sync -j8 // 表示启动8个线程异步下载代码
repo upload . // 表示将本地的commit提交到远程仓库
安装教程见:http://bbs.coloros.com/find7-32316-1-1.htmllinux下手动编译方式有make,mm,mmm。每次干活前要用make(全编译)将所有的依赖一同编译,后续可以使用(单编译)mm,mmm来编译,时间更快,如:packages/apps/xxx mm 或者 mmm packages/apps/xxx。(注:make name -j4, name 由Android.mk中的LOCAL_PACKAGE_NAME定义)
程序员在开发需求时需要先提交到Gerrit平台,由同事和主管review,通过后才能进到最终的代码库。
Git常用指令
Git中文件流转的区域由(工作区-work,暂存区-stage,本地仓库-HEAD)组成。
- git remote add origin git@xxx.git // 添加远程仓库地址的映射并命名为origin
- git config user.name “Your Name” // 配置用户名
- git config user.email you@example.com // 配置邮箱
- git push -u origin master // 将本地的master分支推送到origin,首次需要-u参数关联,后边可省略
- git pull origin master // 拉去origin中的master分支并合并,等同fetch+merge
- git branch –set-upstream-to=origin/master // 设置pull操作的代码来源为origin的master分支后直接用git pull即可
- git pull - -rebase // 同步当前模块的最新代码
- git rm 文件 // 删除已提交的文件
- git status // 查看work的改动
- git add ./-u/-A/文件 // 将work的change添加到stage
- git reset ./文件 // 从stage回到work
- git checkout ./文件 // 还原change,撤销work中的修改
- git commit -a -s // 将stage的change添加到HEAD
- git reset - -soft/mixed/hard HEAD^/commitId // commit回滚,撤销HEAD中添加过的commit
- git log // 查看HEAD中的commit
- git reflog // 查看git操作的历史记录
- git checkout -b test -t origin/alpha // 新建并切到连接远程地址(origin)分支alpha到本地分支test
- git branch -vv/-r/-a // 查看分支
- git checkout test // 切换到分支test
- git branch -D test // 删除分支test
- git stash save test // 将work或stage中的change剪切到全局暂存区,命名test
- git stash apply(复制)/pop(剪切) stash@{id} // 将对应id的change放到work
- git stash drop stash@{id} // 删除对应id的change
- git rebase alpha // 将当前所在分支和分支alpha上的commit合并
- git cherry-pick commitId // 将本地commitId对应的commit复制到当前分支上
- gitk // 提交记录的图形化界面
- git diff // 查看work中修改的内容或查看俩个commit的差别
- git diff - -cached // add.之后的查看内容的变化
- git blame 文件 // 查看文件内容的修改者
- git show commitId // 查看commit中修改的内容
- git bisect // 二分查找bad commit
merge和rebase的区别
- 使用merge会保留原始提交的记录,在git tree中可以查看到完整的提交路线;而rebase则会使我们的git tree看起来更加清爽,更方便去维护。
- 使用merge合并分支的时解决冲突后,使用git add与git commit完成提交。
- 使用rebase合并分支的时解决冲突后,使用git add与git rebase - -continue完成提交。