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

news2024/9/21 8:02:21

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/repo

chmod a+x ~/bin/repo

export 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工具安装配置成功!!!

项目清单库创建

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 myreporeposync

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

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

  关闭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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1953257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java集合——HashMap的底层实现

HashMap将数据以键值对的形式存储&#xff0c;是线程不安全的&#xff08;即在多线程中若不用concurrentHashMap会导致结果错误&#xff09;。 // concurrentHashMap编程示例 import java.util.Map; import java.util.concurrent.ConcurrentHashMap;public class HashMapThrea…

快手电商Android一面凉经(2024)

快手电商Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《快手电商Android一面凉经(2024)》。 面试职位: Android工程师 技术一面 面试形式…

新手小白的pytorch学习第十四弹------十一、十二、十三弹卷积神经网络CNN的习题

习题编号目录 No 1No 2No 3No 4No 5No 6No 7No 8No 9No 10No 11No 12No 13 练习题主要就是 写代码&#xff0c;所以这篇文章大部分是代码哟~ No 1 What are 3 areas in industry where computer vision is currently being used? No 2 工业异常检测&#xff0c;目标检测 Sea…

C语言 -- sizeof和strlen的用法

C语言 -- sizeof和strlen的用法 1. sizeof和strlen的对比​1.1 sizeof​1.2 strlen​1.3 sizeof 和 strlen的对比​ 2. 数组和指针笔试题解析2.1 一维数组​2.2 字符数组​2.3 二维数组 3. 指针运算笔试题解析3.1 题目1&#xff1a;3.2 题目2​3.3 题目3​3.4 题目4​3.5 题目5…

力扣高频SQL 50题(基础版)第十九题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十九题1211. 查询结果的质量和占比题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第十九题 1211. 查询结果的质量和占比 题目说明 Queries 表&#xff1a; …

学习c语言第十五天(初阶测评)

选择题 1.下列程序输出结果为 67 2.下列程序输出结果为 死循环打印 3.i 和j的值分别为什么 2 1 4.k的终值是什么 90 5.输出结果是什么 1 6.正确的是 C 7. C语言规定main函数位置 C 8.不正确的是 D 9.正确的是 c 库函数独立c语言之外 10…

comsol在静水压力下的地应力平衡

comsol在静水压力下的地应力平衡 条件: 水深3m,粗砂层厚度10m,模型长度100m土体的饱和密度1950kg/m3水的密度1000kg/m3浮重度 γ ′ = γ s a t − γ w \gamma=\gamma_{sat}-\gamma_w γ

GD32 PWM输入捕获

前言 通过本次的学习&#xff0c;了解定时器的分类和配置&#xff0c;高级定时器&#xff0c;通用定时器等不同等级的定时器拥有的功能&#xff0c;学习定时器的输入捕获与输出比较功能&#xff08;PWM&#xff09;脉冲宽度调制&#xff0c;来控制电机等外设。 定义 定时器的分…

Pytorch学习笔记——在GPU上进行训练

文章目录 1. 环境准备2. 导入必要库3. 加载数据集4. 定义简单的神经网络模型5. 检查和设置GPU设备6. 定义损失函数和优化器7. 训练模型8. 全部代码展示及运行结果 1. 环境准备 首先&#xff0c;确保PyTorch已经安装&#xff0c;且CUDA&#xff08;NVIDIA的并行计算平台和编程模…

go-kratos 学习笔记(6) 数据库gorm使用

数据库是项目的核心&#xff0c;数据库的链接数据是data层的操作&#xff0c;选择了比较简单好用的gorm作为数据库的工具&#xff1b;之前是PHP开发&#xff0c;各种框架都是orm的操作&#xff1b;gorm还是很相似的&#xff0c;使用起来比较顺手 go-kratos官网的实例是ent&…

鸿蒙UI系统组件10——菜单(Menu)

果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下面名片&#xff0c;关注公众号。 Menu是菜单接口&#xff0c;一般用于鼠标右键弹窗、点击弹窗等。 1、创建默认样式的菜单 菜单需要调用bindMenu接口来实现。bindMenu响应绑定组件的点击事件&am…

ModuleNotFoundError: No module named ‘py3langid‘ 以及如何将包安在虚拟环境下

前提&#xff1a;已经安装过改包&#xff08;pip install py3langid&#xff09;&#xff0c;但仍报错 原因&#xff1a;安装在其他目录下了 解决办法&#xff1a; 1、再次在终端输入pip install py3langid 显示安装位置 Requirement already satisfied: py3langid in c:\…

css大屏设置中间元素四周渐变透明效果

css大屏设置中间元素四周渐变透明效果 四周透明效果&#xff1a; // 设置蒙版上下左右渐变显示mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 10%, rgba(0, 0, 0, 1) 90%, rgba(0, 0, 0, 0) 100%),linear-gradient(to bottom, rgba(0, 0, 0…

性能测试的指标及流程

性能测试指标 相应时间 并发数 吞吐量&#xff1a; 点击数 错误率 资源使用率 所有的东西是存在磁盘里的&#xff0c;在代码运行的时候会将磁盘的东西读取到内存里&#xff0c;磁盘IO和网络都是衡量速度&#xff0c;在任务管理器可查看资源使用率 题&#xff1a; 答案&#xf…

创建vue3项目,以及使用示例

1.在根目录下cmd&#xff1a;vue create myobj&#xff08;没有切换淘宝镜像记得切换&#xff0c;这样创建项目运行快&#xff09; 2. 3.(按空格键选中&#xff0c;选好回撤就到下一步了) 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.然后输入执行以下两步就已经运行项目了 以…

Java算法之递归算法-如何计算阶乘的值

上一篇学了递归之后&#xff0c;练习一下递归算法。 题目&#xff1a;使用递归算法计算阶乘的值&#xff0c;也就是5&#xff01;5*4*3*2*1&#xff0c;直接使用循环是非常简单的&#xff0c;这边练习一下递归算法。 先写一下两个条件 基线条件&#xff1a;等于1的时候返回1…

windows下实现mongodb备份还原

添加环境变量 把mongodb安装目录下的bin路径添加到环境变量的path路径: 备份库 打开CMD&#xff0c;执行以下命令&#xff1a; mongodump -u test -p test -d test -o D://backup_mongodb//20220706 –gzip 参数说明&#xff1a; -u 用户名 -p 密码 -d 需要备份的库名称…

GraphHopper路劲规划导航(Android源码调试运行)

本文主要记录在运行graphhopper安卓版路径规划导航源码的步骤和遇到的问题。 成功运行了程序&#xff0c;但是路劲规划一直不成功&#xff0c;问题一开始是服务地址&#xff0c;后来又是key的问题&#xff0c;在这个项目中涉及到了graphhopper、mapbox、mapilion的key&#xff…

map、foreach、filter这些方法你还不知道什么时候该用哪个吗?那就看过来

forEach&#xff1a;‌主要用于遍历数组并对每个元素执行某种操作&#xff0c;‌通常用于改变当前数组里的值。‌它不会返回新数组&#xff0c;‌而是直接在原数组上进行操作。‌forEach方法不支持return、‌break、‌continue等语句&#xff0c;‌因为这些语句在forEach中不会…

多线程实例-线程池

线程池&#xff0c;就是把线程提前从系统中申请好&#xff0c;放到一个地方&#xff0c;后面需要使用线程的时候&#xff0c;直接从这个地方取&#xff0c;而不是从系统重新申请&#xff0c;线程用完之后也回到刚才的地方。 线程池的优点&#xff1a;降低线程创建和销毁的开销…