zoukankan      html  css  js  c++  java
  • repo仓库配置搭建及基础命令学习

    一:repo简介

           Android使用Git进行代码管理,而Repo命令行工具对Git命令进行了封装,是在Git之上构建的工具(它其实是一个python脚本),方便管理多个git项目,从而更好地对代码进行集中式管理。

    repo使用过程分如下几步:

    1.运行repo init 命令,克隆Android的一个清单库,这个清单库是通过xml文件建立的版本清单库。

    2.清单库中的manifest.xml文件,列出了各个版本库克隆所需要的参数信息;包括版本库的地址、工作区定义的目录结构,以及分支的对应关系。

    3.运行repo sync的命令,开始同步,即分别克隆xml文件中的版本库数据到本地的工作区中。

    4.对各个版本库进行切换分支操作,切换到某个分支操作提交并push到远程。

    【【【主要操作步骤见红色字体;请确保操作如下步骤之前在gerrit.dd.net的个人账号下配置了本地机器的ssh public key】】】

    二:配置ssh config  

    按如下方式在~/.ssh/config里配置:(若没有config文件需要新建)

    Host gerrit.dd.net
    HostName gerrit.dd.net
    User 你的gerrit账户名
    IdentityFile ~/.ssh/id_rsa
    PubkeyAuthentication yes

    三:安装repo:下载Repo只针对第一次使用。 

            1. 确认主目录下存在 bin/ 目录并已包含在路径中:mkdir ~/bin          PATH=~/bin:$PATH  

            2.下载Repo工具并设置可执行的权限: curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo      chmod a+x ~/bin/repo

            3.这里的repo只是一个引导脚本而不是直接称之为repo,因为repo大部分功能代码都不在其中,下载的只是帮助这个repo程序继续下载和加载的工具。

    注:修改repo脚本参数的repo_url :REPO_URL ='ssh://gerrit.dd.net:29418/git-repo' 

    四:repo和清单库的初始化

          下载并保存repo引导脚本后,建立一个工作目录,这个工作目录将作为Android工作区目录。在工作目录中执行repo init -u <url>,完成repo完整的下载及项目清单版本库的下载。

          mkdir workspace     cd workspace     repo init -u ssh://gerrit.dd.net:29418/manifest --no-repo-verify (注意:manifest仓库地址需要研发组内给出

          命令repo init要完成如下操作:

          1.完成repo工具的完整下载,现在仅有的不过是repo 的引导程序。初始化操作会从repo脚本里设定的镜像地址中克隆repo.git库到当前的目录下。一个隐藏的.repo目录。

          2.克隆创建的清单库manifest.git(地址来自与-u参数),清单库实际上只包含一个default.xml文件,这个XML文件定义了多个版本库和本地地址的映射关系,是repo工作的指引文件。

          3.克隆的清单库位于.repo/manifests.git中,本地克隆到.repo/manifests。自己新建的git仓库里边就放了个简单的default.xml文件:ssh://gerrit.dd.net:29418/manifest 

          repo引导脚本的init子命令可以使用下列和清单库相关的参数:

               -u:指定一个URL,其连接到一个maniest仓库

               -m :在manifest仓库中选择一个xml文件

               -b:选择一个maniest仓库中的一个特殊的分支

               --repo-url:设定repo的版本库地址。

               --repo-branch:设定需要检出的分支。

               --no-repo-verify:设定不要对repo的里程碑签名进行严格的验证。

               --mirror:只在repo第一次初始化的时候使用,建立本地镜像

     五:同步项目

           repo sync 默认同步xml文件中定义的所有仓库,可以单独指定sync哪个或哪些仓库: repo sync name1  name2

           如果某个工程从未同步过,repo sync相当于git clone。所有远程仓库的分支都会被拷贝到本地仓库。

           如果工程已经同步过,repo sync相当于: git remote update     git rebase origin/branch

          (注:branch是本地工程目录当前分支。如果当前分支不是远程仓库任意分支的跟踪分支,那么这个工程不会发生同步。相反,就会进行合并操作。合并中有冲突,使用Git相关命令处理。)

     六:修改提交并push到远程

           cd进入到sync到本地的某个分支仓库目录,修改提交,git branch发现仓库都是no branch状态:push到远程时用命令:git push origin HEAD:master

    七:repo常用命令

           a .  repo init

           b .  repo sync

           c .  repo upload  [ project-list ] :上传修改的代码 ,如果你本地的代码有所修改,那么在运行 repo sync 的时候,会提示你上传修改的代码,所有修改的代码分支会上传到 Gerrit (基于web 的代码review 系统), Gerrit 受到上传 的代码,会转换为一个个变更,从而可以让人们来review 修改的代码。 

           d .  repo diff  [project list]:显示提交的代码和当前工作目录代码之间的差异

           e .  repo download :

           f .  repo forall -c “command”:这个命令会遍历所有的git仓库,并在每个仓库执行-c所指定的命令(这个被执行的命令就不限于仅仅是git命令了,而是任何被系统支持的命令,比如:ls 、 pwd 、cp 等)

                 例如:repo forall –c “echo $REPO_PATH”     repo forall –c “git reset –hard HEAD”   环境变量: REPO_PROJECT    REPO_PATH   REPO_REMOTE

           g .  repo prune  [project list]:  实际上是对git branch –d命令的封装,该命令用于扫描项目的各个分支,并删除已经合并的分支,

           h .  repo start newbranchname [project list] :在指定工程仓库创建一个当前所在远程分支的跟踪分支,并切到跟踪分支。

           i .  repo status  [project list] :显示当前工作目录的状态或指定工程名或者工程路径的状态。

           j .  repo manifest -o default.xml -r :获取仓库的sha1值,并记录在一个新的default.xml文件中

     default.xml 示例:

    <?xml version="1.0" encoding="UTF-8"?>

    <manifest>

    <! -- remote元素设置远程服务器属性,可以为多个:name设置远程服务器名,用于git fetch,git remote等操作;fetch 所有project的git url前缀;指定gerrit的服务器名,用于repo upload操作 -->

    <remote name="origin"   fetch="gerrit.dd.net"   review="http://gerrit.dd.net"/>

    <! -- default元素设定所有peoject的默认属性值:revision为git分支名,如master或refs/heads/master;remote为某一个remote元素的name属性值,用于指定使用哪一个远程服务器;sync-j为sync操作时的线程数-->

    <default revision="master"  remote="origin"  sync-j="4" />

    <! -- project元素指定一个需要clone的git仓库:path指定clone出来的git仓库在本地的地址;name唯一的名字表示project,用于拼接生成项目 git仓库的url;revision:指定需要获取的git提交点,可以定义成固定的branch,或者是明确的commit 哈希值 -->

    <project path="fanxiao/fanxiaotest1" name="MA/Applications/app-a"  revision="master" />
    <project path="fanxiao/fanxiaotest2" name="MA/Applications/app-b" revision="52cf9185ff1d" />
    <project path="fanxiao/fanxiaotest3" name="fanxiaotest"  revision="master"/>

    </manifest>

  • 相关阅读:
    域名和IP地址的关系通俗解释
    简单卷、跨区卷、带区卷、镜像卷和 RAID5的区别
    什么是网络端口
    Windows7 64 bit 下解决:检索 COM 类工厂中 CLSID 为 {0002450000000000C000000000000046} 的组件时失败
    SQL函数,收藏先。
    C#中抽象类和接口的区别(转)
    SQL数据库碎片检查DBCC SHOWCONTIG含义
    SQL锁表语句
    50种方法优化SQL Server
    简单工厂模式(转)
  • 原文地址:https://www.cnblogs.com/junlinqunxia/p/8570372.html
Copyright © 2011-2022 走看看