repo 使用

repo是android为了方便管理个git库而开发的python脚本。

repo是通过manifests库来管理项目的清单文件,通过repo库来维护。

当用户使用repo初始化项目时,就会从远程将manifests和repo两个git库拷
贝到本地,repo将自动化管理信息都隐藏到根目录的.repo子目录中。

项目清单库(.repo/manifests)
    
    <remote>:描述的是远程仓库的基本信息。
    name:描述的是远程仓库的名称,通常看到的命名是origin;
    fetch:用作项目名称的前缘,在构造项目仓库远程地址时使用到;
    review:描述的是用作code review的server地址
    
    <default>:default标签的定义的属性,将作为<project>标签的默认属性,在
    <project>标签中,也可以重写这些属性。
    revision:表示当前版本,也就是俗称的分支;
    remote:描述的是默认使用的远程仓库名称,即<remote>标签中的name
    sync -j:表述在同步代码是,并发的任务数量,配置高的机器这个值可以调大

    <project>:每一个repo管理的git库,就是对应到一个<project>标签
    path描述的是项目相对于远程仓库URL的路径,同时将作为对应的git库在本地代码的路径

    name用于定义项目名称,命名方式采用的是整个项目URL的相对地址。譬如,AOSP项目的URL
    为https://android.googlesource.com/,命名为platform/build的git库,访问的
    URL就是https://android.googlesource.com/platform/build

repo脚本库
    repo对git命令进行了封装,提供了一套repo的命令集,所有repo管理的自动化实现也都包含在
    这个git库中。在第一次初始化的时候,repo会从远程把这个git库下载到本地。

仓库目录和工作目录
    仓库目录保存的是历史信息和修改记录,工作目录保存的是当前版本的信息。一般来说,一个项目
    的git仓库目录(默认为.git)是位于工作目录下面的,但是git支持将一个项目的git仓库目录和工作
    目录分开存放。对于repo管理而言,既有分开存放,也有位于工作目录存放的:
    
    manifests:仓库目录有两份拷贝,一份位于工作目录(.repo/manifests)的.git目录下,另一份独立
    存放于.repo/manifeste.git
    
    repo:仓库目录位于工作目录(.repo/repo)的.git目录下

    project:所有被管理git库的仓库目录都是分开存放的,位于.repo/projects目录下。同时,也会保留
    工作目录的.git,但里边所有的文件都是到.repo的链接。这样,即做到了分开存放,也兼容了在工作
    目录下的所有git命令。

    因为.repo目录下保存了项目的所有信息,所以要拷贝一个项目时,只需要拷贝这个目录就可以了,repo
    支持从本地已有的.repo中恢复原有的项目。

初始化:
    repo init -u ssh://xxxx@xxx:29428/xxx -b xxx --repo-url=ssh://xxxx@xxxx:29428/git-repo --no-repo-verify

    -u:指定manifests这个远程git库的URL,manifests库是整个项目的清单。
    -m,-manifest-name:指定所需要的manifests库中的清单文件。
    -b,-manifest-branch:指定manifest.xml文件中的版本,也就是分支

    执行该命令后,会在当前目录新建一个.repo的子目录,然后clone了两个git库,其中一个是-u指定的
    manifests,本地git库的名称是manifest.git;另一个是默认的repo,这个URL也可以通过参数指定;
    接着,创建了manifest/.git目录,里面的所有文件都是到manifests.git这个目录的链接,这个是方便
    对manifests目录执行git命令,紧接着,就会将manifest切换到-b参数指定的分支;
    最后在.repo目录下,创建了一个软连接,链接到-m参数指定的清单文件,这样就完成了一个多git库
    的初始化。

    扩展:
    -repo-url:指定远程repo库的URL;默认情况下是https://android.googlesource.com/tools/repo,
    但国内访问Google受限,会导致这个库无法下载,从而导致repo init失败,所以可以通过该参数指定
    一个访问不受限的repo地址
    
    -repo-branch:同manifest这个git库一样,repo这个git库也是有版本差异的,可以通过该参数来指定
    下载repo这个远程git库的特定分支
    
    -no-repo-verify:在下载repo库时。会对repo的源码进行检查。通过-repo-url指定第三方repo库时,
    可能会导致检查不通过,所以可以配套使用该参数,强制不进行检查
    
同步:
    repo sync [PROJECT_LIST]
    下载远程代码,并将本地代码跟新到最新,这个过程叫做同步。如果不使用任何参数,那么会对所有repo
    管理的进行同步操作;也可以PROJECT_LIST参数,指定若干要同步的PROJECT。根据本地git库代码不同,
    同步操作会有不同的行为:
    
    当本地git库第一次触发同步操作时,那么该命令等价于git clone,会将远程git库直接拷贝到本地。

    当本地已经触发过同步操作时,那么该命令等价于git remote updata&&git rebase origin/<BRANCH>,
    <BRANCH>就是于当前本地分支所关联的远程分支 代码合并可能会产生冲突,当冲突出现时,只需要解决
    完冲突,然后执行git rebase --continue即可。

    当sync命令正确执行完毕后,本地代码就同远程代码保持一致了。在一些场景下,我们会用到sync命令的一些参数:
    
    -j:开启多线程同步操作,这会加快sync命令的执行速度。默认情况下,使用4个线程并发进行sync
    
    -c,-current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程分支,当远程分支比较多的
    时候,下载的代码量就大。使用该参数,可以缩减下载时间,节省本地磁盘空间

    -d,detach:脱离当前本地分支,切换到manifest.xml中设定的分支。在实际操作中,这个参数很有用。当我们第
    一次sync完代码后,往往会切换到dev分支进行开发。
    
    -r,指定repoid进行查询
    
    -e xxx,-cachedir=xxx 存储元数据的目录
    
    -p,将包下载到路劲,默认是当前目录
    
    -l,启用yum插件支持
    yum是Fedora和RedHat以及SUSE中的Shell前端软件包,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖关系,并且一次安装所有依赖的软体包
        
repo forall命令:
    repo forall的作用是可以遍历每个仓库并在每个仓库下执行同样的命令
    且repo forall有以下几种自带的环境变量:
    REPO_PROJECT        //指定项目的名称(即仓库名)
    REPO_PATH            //指定项目在工作区的相对路径
    REPO_REMOTE            //指定项目远程仓库的名称
    REPO_LREV            //指定项目最后一次服务器仓库对应的哈希值
    REPO_RREV            //指定项目在克隆时的指定分支(即manifest中的revision属性)
    需注意的是,使用环境变量需要将指令用单引号包裹,如:
    repo forall -c 'echo REPO_PROJECT'            //打印仓库名称
    
    
    参数如下:
    -c                    //后面所带是参数是shell指令
    -p                    //在shell指令输出之前列出项目名称
    -v                    //列出执行shell指令输出的错误信息
    
    
    
    
    
    


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值