一:repo指令
1 repo init (下载repo并克隆manifest)
下载一个Repo项目,只需要三条命令:
$ repo init --no-repo-verify -u <URL> -m <manifest-file>
$ repo sync
$ repo start --all master
repo init中的使用到参数含义如下:
-u:指定manifest仓库的路径,这是一个git仓库地址
-m:指定manifest仓库中的某个manifest文件
--no-repo-verify:设定不要对repo的里程碑签名进行严格的验证。
-b:选择一个maniest仓库中的一个特殊的分支
2 repo sync(下载代码)
Usage:
repo sync [<project>…]
用于参照清单文件.repo/manifest.xml克隆并同步版本库。如果某个项目版本库尚不存在,则执行repo sync 命令相当于执行git clone,如果项目版本库已经存在,则相当于执行下面的两条指令:
git remote update
相当于对每一个remote源执行了fetch操作
git rebase origin/branch
针对当前分支的跟踪分支执行rebase操作。
Example:
repo sync
也可以选择克隆其中的一个项目:
repo sync platform/build
3 repo start(创建并切换分支)
Usage:
repo start <newbranchname> [--all | <project>…]
刚克隆下来的代码是没有分支的,repo start实际是对git checkout –b 命令的封装。为指定的项目或所有项目(若使用—all参数),以清单文件中为设定的分支,创建特性分支。这条指令与git checkout –b 还是有很大的区别的,git checkout –b 是在当前所在的分支的基础上创建特性分支,而repo start是在清单文件设定分支的基础上创建特性分支。
Example:
repo start master --all
假设清单文件中设定的分支是gingerbread-exdroid-master,那么执行以上指令就是对所有项目,在gingerbread-exdroid-master的基础上创建特性分支stable。
repo start master platform/build platform/bionic
假设清单文件中设定的分支是master,那么执行以上指令就是对platform/build、platform/bionic项目,在master的基础上创建特性分支master
4 repo checkout(切换分支)
Usage:
repo checkout <branchname> [<project>…]
实际上是对git checkout 命令的封装,但不能带-b参数,所以不能用此命令来创建特性分支。
Example:
repo checkout crane-dev
repo checkout crane-dev platform/build platform/bionic
5 repo branches(查看分支)
Usage:
repo branches [<project>…]
Example:
repo branches
repo branches platform/build platform/bionic
6 repo diff(查看工作区文件差异)
Usage:
repo diff [<project>…]
实际是对git diff 命令的封装,用于分别显示各个项目工作区下的文件差异。
Example:
repo diff ---查看所有项目
repo diff platform/build platform/bionic ---只查看其中两个项目
7 repo prune(删除已经合并分支)
实际上是对git branch –d命令的封装,该命令用于扫面项目的各个分支,并删除已经合并的分支,用法如下:
repo prune [<project>…]
8 repo abandon(删除指定分支)
实际上是对git branch –D 命令的封装,用法如下:
repo abandon <branchname> [<project>…]
9 repo status(查看文件状态)
实际上是对git diff-index、git diff-filse命令的封装,同时显示暂存区的状态和本地文件修改的状态
$repo/repo status platform/bionic
以上的实例输出显示了platform/bionic项目分支的修改状态
每个小节的首行显示羡慕名称,以及所在分支的名称
第一个字母表示暂存区的文件修改状态
-:没有改变
A:添加(不在HEAD中,在暂存区中)
M:修改(在HEAD中,在暂存区中,内容不同)
D:删除(在HEAD中,不在暂存区)
R:重命名(不在HEAD中,在暂存区,路径修改)
C:拷贝(不在HEAD中,在暂存区,从其他文件拷贝)
T:文件状态改变(在HEAD中,在暂存区,内容相同)
U:未合并,需要冲突解决
第二个字母表示工作区文件的更改状态
-:新/未知(不在暂存区,在工作区)
m:修改(在暂存区,在工作区,被修改)
d:删除(在暂存区,不在工作区)
两个表示状态的字母后面,显示文件名信息。如果有文件重名还会显示改变前后的文件名及文件的相似度
10repo forall
Usage:
repo forall [<project>…] –c <command>
迭代器,可以在所有指定的项目中执行同一个shell指令
Options:
-c:后面所带的参数着是shell指令
-p:在shell指令输出之前列出项目名称
-v:列出执行shell指令输出的错误信息
eg:repo forall -c git status --ignored 对所有项目显示git状态
repo forall -c git reset --hard HEAD~1 对所有分支,回退上一工作分支
其他指令:
从本地分支切换到特定分支:
repoclean -a //清除本地分支修改,恢复到初始repo sync版本
repo branch //查看分支
repo abandon master //清除本地master仓库分支(abandon 清除分支命令)
repo prune //删除已合并分支
repo init -m 分支名 //切换到对应分支
repo sync //更新分支
repo start master --all //初始化所有分支,基于master
repo info //当前repo信息
此时repo branch 会显示
* master | in all projects
二:git指令
git clone <URL> //克隆manifest,可查看当下仓
git add //暂存修改
git checkout -- file.xx //取消对文件的修改
git commit //提交到本地
-m "提交说明"
git reset HEAD file.xx //取消本地暂存的文件
git commit --amend //修订上次提交
git status //检查当前文件状态
git log //查询git提交记录
git reset --hard HEAD~1(number) 恢复到第几个提交的状态
git diff //显示尚未暂存的改动
git diff --cached
git diff --staged //这两个指令,查看已暂存的将要添加到下次提交里的内容
git diff --check //检查空白错误
git rm //从git仓库删除文件
git mv file_from file_to //重命名文件
git remote //对远程仓库的操作
git fetch remote-name //拉取远程仓库
git push origin master //推送到远程仓库
git tag //给仓库版本打标签
git config //为git命令设置别名
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
分支操作(工作分支,not gerrit仓库代码分支)
git branch 分支name //创建分支
git checkout 分支name //切换到此分支
合并为 git checkout -b 分支name
//将hotfix合并入 master
$ git checkout master
$ git merge hotfix
//删除 hotfix分支
$ git branch -d hotfix
git mergetool //合并图形化工具
git stash list 显示保存进度的列表
git show stash@{0} # see the last stash
git stash pop [–index] [stash_id]
git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
通过git stash pop命令恢复进度后,会删除当前进度。
git stash apply [–index] [stash_id] 除了不删除恢复的进度之外,其余和git stash pop 命令一样。
git stash clear