当前位置: 首页 > news >正文

repo 工具安装和使用教程(windows+gitee)

repo是什么

       官方的定义:Repo是谷歌用python脚本写的调用git的一个脚本,可以实现管理多个git库。

Android的源代码使用Repo 命令行工具来管理多个git仓库,大概有百多个。要想克隆和管理百多个 Git 仓库,不是一件简单的事情。Repo 命令行工具对 Git 部分命令如clone、pull,push,分支切换等众多命令和操作动作进行封装,将百多个 Git 库有效的进行组织。

Linux下安装Repo 

linux下的Repo安装稍简单些,兼容性较好。

curl http://android.git.kernel.org/repo >~/bin/repochmod a+x ~/bin/repoexport PATH=$PATH:~/bin

Windows下Repo安装

repo原本是谷歌搞的一个方便下载AOSP的工具基于git,但由于种种原因不能直接在Windows上使用,如果按照网上搜到的方法,安装会遇到不少问题。

repo安装失败

方法一(不成功):

mkdir ~/bin
curl https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo > ~/bin/repo
curl https://raw.githubusercontent.com/esrlabs/git-repo/stable/repo.cmd > ~/bin/repo.cmd
chmod a+rx ~/bin/repo

方法二(不成功):使用的是国内清华镜像

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

下载完整的Repo文件:

git clone https://mirrors.tuna.tsinghua.edu.cn/git/git-repo

 方法三(不成功):

打开github上的git-repo仓库,把仓库代码clone或者zip包下载下来:

https://github.com/esrlabs/git-repo

 下载后的目录路径添加至环境变量,使用bash命令查看版本:

repo --version  是可以查看成功的;

但是使用repo init -u 功能就各种报错了:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r25

 

repo成功安装步骤

使用的是gitee网站的repo开源代码,步骤如下:

1.打开git bash,创建一个环境路径(并把该路径加到windows的环境变量中去):

mkdir ~/bin

2.配置环境变量

通过命令:curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo;下载引导脚本生产引导文件repo;该文件放置C:\Users\ZPC18-121\bin,所以环境变量是该路径;

3.Repo 引导命令安装:

(1)执行如下引导命令:

# python3 版本向下兼容,注意这里应该下载是 repo-py3,而不是 repo
# PS: 这里下载的 repo 只是一个引导脚本,需要后续 repo init 后才有完整功能
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/bin/repo
# 赋予脚本可执行权限
chmod a+x ~/bin/repo

 

(2)查看源码的方法(可以克隆到其它路径查看源码,不然和引导文件名冲突了)

git clone https://gitee.com/oschina/repo.git

 

源码也有repo-py3(实测是不能直接使用的,还是要使用:curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/ 的方式生产引导文件)

 

4. 测试repo 是否下载配置成功:

命令:repo --version

 

5.安装 requests 依赖

# 安装 requests 依赖,如果跳过这一步,后续执行命令时会自动提示安装(不安装repo init会有问题)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

到此,repo工具安装配置成功!!!

项目清单库 manifest创建

1.创建名为 manifest 的仓库(该仓库用于Repo 初始化与所有要管理的git仓库初次同步),并在仓库中创建一个 default.xml 文件作为 repo 初始化的依据 ;default.xml文件用例:

<?xml version="1.0" encoding="UTF-8"?>
<manifest><remote  name="gitee"fetch="git@gitee.com:{namespace}"autodotgit="true" /> <!--fetch=".." 代表使用 repo init -u 指定的相对路径 也可用完整路径,example:https://gitee.com/MarineJ/manifest_example/blob/master/default.xml--><default revision="master"remote="gitee" /><!--revision 为默认的拉取分支,后续提 pr 也以 revision 为默认目标分支--><project path="repo_test1" name="repo_test1" />  <!--git@gitee.com:{namespace}/{name}.git name 与 clone 的 url 相关--><project path="repo_test2" name="repo_test2" />
</manifest>

以下为 repo init 初始化命令, 需要用 -u 参数来指定 manifest 的远程仓库地址:

repo init -u git@gitee.com:{namespace}/manifest.git

如我配置的manifest仓库及default.xml内容是:

【1】意思1:我的git服务器是地址是:"https://gitee.com/monkeyqiyu"

【2】意思2:通过 manifest 的git仓库:https://gitee.com/monkeyqiyu/manifest.git 中的default.xml引导文件来管理同服务器的两个git仓库(可以继续按格式添加其它名字的仓库):

https://gitee.com/monkeyqiyu/git_test.git

https://gitee.com/monkeyqiyu/git_test1.git

default.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<manifest><remote  name="gitee"fetch="https://gitee.com/monkeyqiyu"autodotgit="true" /> <!--fetch=".." 代表使用 repo init -u 指定的相对路径 也可用完整路径,example:https://gitee.com/MarineJ/manifest_example/blob/master/default.xml--><default revision="master"remote="gitee" /><!--revision 为默认的拉取分支,后续提 pr 也以 revision 为默认目标分支--><project path="git_test" name="git_test" />  <!--git@gitee.com:{namespace}/{name}.git name 与 clone 的 url 相关--><project path="git_test1" name="git_test1" />
</manifest>

git服务器的manifest仓库:

 Repo 初始化与仓库初次同步

1.创建一个本地文件夹作为工程目录,并进入该目录,执行repo初始化和仓库初次同步

mkdir your_project && cd your_project
repo init -u git@gitee.com:{namespace}/manifest.git
repo sync

执行:

mkdir myrepo&& cd myrepo

repo init -u https://gitee.com/monkeyqiyu/manifest.git

repo sync

提升报错需要管理员权限:

  关闭bash,让后用管理员权限打开git bash,进入工程目录再次执行命令:

repo init -u https://gitee.com/monkeyqiyu/manifest.git

然后执行同步,即可拉取要管理的git 仓库:

repo sync

 

项目清单库介绍

repo脚本库(.repo/repo)

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

仓库目录和工作目录

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

  • manifests: 仓库目录有两份拷贝,一份位于工作目录(.repo/manifests)的.git目录下,另一份独立存放于.repo/manifests.git
  • repo:仓库目录位于工作目录(.repo/repo)的.git目录下,repo的源码,这个仓库我们不用管。
  • project:所有被管理git库的仓库目录都是分开存放的,位于.repo/projects目录下。同时,也会保留工作目录的.git,但里面所有的文件都是到.repo的链接。这样,即做到了分开存放,也兼容了在工作目录下的所有git命令。

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

.repo
├── manifests       # 一个git库,包含default.xml文件,用于描述repo所管理的git库的信息
├── manifests.git   # manifest这个git库的实体,manifest/.git目录下的所有文件都会链接到该目录
├── manifest.xml    # manifests/default.xml的一个软链接
└── repo            # 一个git库,包含repo运行的所有脚本

repo常见命令使用

repo命令的使用格式如下所示:

$ repo <COMMAND> <OPTIONS>

可选的的有:help、init、sync、upload、diff、download、forall、prune、start、status,每一个命令都有实际的使用场景;

项目开发流程是:

  1. repo init初始化工程,指定待下载的分支
  2. repo sync下载代码
  3. repo start将本地git库切换到开发分支(TOPIC BRANCH)
  4. 在本地进行修改,验证后,提交到本地
  5. repo upload上传到服务器,等待review

Repo + Gitee 本地开发流程

repo start {branch} --all # 切换开发分支,当对部分仓库进行指定时,会触发仓库的预先fork
repo forall -c git add ./ git add / repo stage  # 批量加入暂存区或者单独加入
repo forall -c git commit / git commit  # 批量进行提交或者单独提交
repo config --global repo.token {TOKEN} # 进行 gitee access_token 配置, access_token 获取连接 https://gitee.com/profile/personal_access_tokens
repo config repo.pullrequest {True/False} # 对是否触发PR进行配置
repo push --br={BRANCH} --d={DEST_BRANCH}  # 进行推送并生成PR和审查,执行后会展示出可进行推送的项目,去掉注释的分支会进行后续推送
repo gitee-pr --br={BRANCH} # 获取项目推送后的指定分支的PR列表

实用命令介绍

repo init -u ssh://xxx/manifest

ssh://xxx/manifest 是一个git仓库,这个仓库有1个xml文件,这个文件记录了要管理的git仓库路径

repo sync     #clone所有git仓库

repo start master --all  //所有git仓库创建master分支

 repo forall –c git xxx      #对所有git仓库执行git命令

repo sync #(除非明确让你用,否则不要用) 更新所有仓库的代码

repo forall –c git pull --rebase

#提交所有仓库的commit到远程服务器

repo upload (不稳定,有时处理不了中文)

repo forall –c git push origin HEAD:refs/for/master

repo 代码库全部回滚到某一日期 

 repo forall -c 'commitID=$(git log --before "2024-06-24 24:00" -1 --pretty=format:"%H") && git reset --hard  $commitID'

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 关于RAG进展|| RankRAG:在大模型中统一检索增强生成的上下文排序
  • Python使用selenium访问网页完成登录——装饰器重试机制汇总
  • electron-builder打包vue2项目不显示element-ui图标
  • Gitlab以及分支管理
  • ubuntu20.04 开源鸿蒙源码编译配置
  • 微软蓝屏事件:网络安全与系统稳定性的深刻反思
  • elementUI点击el-card选中边框变色
  • photoshop学习笔记——选区3
  • Github 2024-07-27开源项目日报 Top10
  • 4 款最佳 C# 无头浏览器
  • 基于SpringBoot+Vue的在线政务服务中心(带1w+文档)
  • 计算机体系结构:缓存一致性ESI
  • Java(十)——接口
  • 【中项】系统集成项目管理工程师-第8章 信息安全工程-8.2信息安全系统
  • 浏览器自动化测试工具selenium——爬虫操作记录
  • ----------
  • 深入了解以太坊
  • 【node学习】协程
  • 2018一半小结一波
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • MobX
  • mysql常用命令汇总
  • node学习系列之简单文件上传
  • Object.assign方法不能实现深复制
  • Promise初体验
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • vuex 学习笔记 01
  • vue--为什么data属性必须是一个函数
  • Yii源码解读-服务定位器(Service Locator)
  • Zepto.js源码学习之二
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 开发基于以太坊智能合约的DApp
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 手机端车牌号码键盘的vue组件
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 鱼骨图 - 如何绘制?
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • #define 用法
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (备忘)Java Map 遍历
  • (编译到47%失败)to be deleted
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)springcloud实战之config配置中心
  • (四)事件系统
  • (一)为什么要选择C++
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (自用)gtest单元测试
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .cfg\.dat\.mak(持续补充)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net mvc总结
  • .Net 执行Linux下多行shell命令方法
  • .NET6 命令行启动及发布单个Exe文件
  • :O)修改linux硬件时间