repo 操作命令

 

repo 操作

repo init -u URL 用以在当前目录安装 repository ,会在当前目录创建一个目录 ".repo"  -u 参数指定一个URL, 从这个URL 中取得repository 的 manifest 文件。   
示例:repo init -u git://android.git.kernel.org/platform/manifest.git
获取的manifest文件放在.repo目录中。命名为manifest.xml。这个文件的内容其实就是所有被git管理的仓库的列表!


可以用 -m 参数来选择获取 repository 中的某一个特定的 manifest 文件,如果不具体指定,那么表示为默认的 namifest 文件 (default.xml)
repo init -u git://android.git.kernel.org/platform/manifest.git -m dalvik-plus.xml
(有诸多供我们选择的manifest文件,所有的manifest文件都放在目录.repo/manifests中,该目录本身亦被git所管理,你可以cd进去看看)
可以用 -b 参数来指定某个manifest 分支。


repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0
你会发现.repo/manifests是个被git管理的仓库,这里放的是所有的manifest文件(*.xml),因为被git管理,固然有分支,-b可以切换到你想要的分支然后再下载相关的xml文件,当然具体下载那个xml还要看-m参数了,所以如果你仅仅指定-b而没有-m的话,就是下载-b指定分支下的default.xml文件,如果不指定-b参数,那么会默认使用master分支

 

如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:
 repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake

repo init -b branchname 代表对mainfrema.xml 库执行项目所有库切换到branchname分支

repo  checkout branchname(用repo切换所有库的分支, 前提是本地已建立了此branchname分支,如果本地还未建立此分支则无法切过去)

如果本地已建立了分支branchname,而要进行版本更新:

 

repo sync -c j12  直接repo sync 会更新所有的分支的代码,加入参数-C 代表所有库都执行同样的命令

如果本地还未已建立了分支branchname,要进行版本更新:

repo sync -c -b j12 此命令只比上条 命令多了一个参数-b ,-b 代表在当前匿名分支更新版本,

 

如果是想把Android当前主线上最新版本的所有的sourcecode拿下来
repo init -u git://android.git.kernel.org/platform/manifest.git

 

如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:
 repo init -u git://android.git.kernel.org/platform/manifest.git -b branchname

------------------------------------------------------------------------------------------------------------

初始化Git仓库
repo init -u git://172.16.1.11/manifest.git -b 分支名称 -m wanglei.xml
 
更新仓库代码
repo sync
 
启动分支代码
repo start 分支名称 --all   // --all意思为对所有项目操作,

切换分支
repo start branchname --all   整体所有的git库都切换到branchname分支

如果对某个项目操作如下
repo start master(分支名) cmd1(项目名)

[ repo start master --all   区别 repo start --all master  

1.创建并且切换到新分支上,两个以上分支就不适用
# repo start master --all
2.切换到已创建的master分支
# repo start --all master  
 等同于:
# repo forall -c git checkout master
# repo branch //查看分支是否切换成功

]
 
下载新分支
repo forall -c git checkout -b  本地分支名称(自定义)  服务器分支名称
 
切换到另一个分支
repo forall -c git checkout your_branch
 
克隆分支下的某个git仓库
git clone  git://172.16.1.11/teset_dir/test.git -b test-dev
 
删除分支
repo forall -c git branch -D  分支名称
 
从本地代码中,将最近一次的修改抽取成patch
git add -u
git commit -m "correct the wrong info of charger status"
git format-patch -1
 
从分支的提交记录上抽取patch
git log
git format-patch 31accb599f63eadf07f606da9fe1e1b0fb728a65 -1
 
强制取消之前的修改,并恢复到最新版本
git reset --hard
 
将文件恢复到之前某个提交记录的版本
git log 文件名
git reset commit号
git stash
 
把patch提交到本地,以patch owner的名义提交
git am   patch名称
 
以自己的账号合入patch
patch -p1 <   patch名称

 

repo init -u git@xxxx -b xxxx
repo sync -c
repo forall -c “git checkout -b xxx origin/xxx”
 


repo forall -c 'git clean -xdf' && repo forall -c 'git reset --hard'  && repo forall -c 'git pull'     此命令即将使本地版本完完全全与服务器最新版本保持一致,

12. repo forall -c 
这个命令会遍历所有的git仓库,并在每个仓库执行-c所指定的命令(这个被执行的命令就不限于仅仅是git命令了,而是任何被系统支持的命令,比如:ls 、 pwd 、cp 等等的 )
当我想通过这个命令遍历所有的仓库并在每个仓库执行"git checkout . "用以将每个仓库的改动都清除的时候,我这么输入命令:
repo forall -c git checkout . 
我发现这样根本不行。看来repo不能遍历执行checkout这个命令。今天我终于想到了另外一个命令"git reset --hard HEAD" 哈哈
repo forall -c git git reset --hard HEAD
再说一个新发现:以前用repo forall 执行一些命令的时候,可能再遍历到某个仓库的时候出了问题,但是我却苦于不知道这个仓库到底是哪个!一直也没有解决。今天终于找到了。。。。  关键时候还是要看命令自己带的帮助手册呀。。。
repo help forall  用这个命令查看下针对forall的帮助吧。说的很清楚,repo执行的时候加上-p参数就可以在遍历到每个仓库的时候先打印出当前的pwd,然后再继续执行-c所指定的命令。举例如下:
repo forall -p -c git branch    
 
//该命令会遍历所有仓库并打印每个仓库的分支情况,由于有了-p参数,这样便会打印出每个仓库的路径!!!
 
11. repo status
显示 project 中每个仓库的状态,并打印仓库名称。

 

异常解决方案

1、repo sync时可能出现问题,对于已有项目已经编译过,会有很多新生成或修改的文件。如果需要清除这些多的文件以及将所有修改的文件恢复回去,可以运行下述两个命令:

repo forall -c "git reset --hard HEAD"
repo forall -c "git clean -df"

但是android下面的out目录需要手动清除:rm  -rf  out.  在这个基础上,再repo sync一般就不会有问题了。

 

同步代码:repo sync 

如果本地版本库中的源代码有一些改动,执行上述命令后,会出现对应的库无法成功更新下来,如下提示(笔者本地为例):

packages/apps/Calendar/: discarding 1 commits
packages/apps/Contacts/: discarding 2 commits
packages/apps/Mms/: discarding 1 commits
packages/apps/Music/: discarding 1 commits
packages/apps/Phone/: discarding 1 commits
vendor/embinux/support-tools/: discarding 1 commits 

这时需要使用下面的操作命令(解决此类冲突的方案很多,作者只是在此备注其一):

1,repo forall -c git reset --hard
2,repo sync

这样,本地代码就和服务端仓库中的代码完全一致了。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值