定制repo(不再切换python和google源)

repo_bin

文章目录

  • 定制repo(不再切换python和google源)
    • 前言
    • 各用各的repo
    • 定制repo2/repo3源码
    • 自动识别repo2/repo3项目
    • 完整解决方案:

定制repo(不再切换python和google源)

众知,Android/AOSP/ROM系统开发,不可避免地要和repo打交道。但repo并不好用,和python版本相关联、拉取google源、容易受共用服务器影响。本文提出了灵活管理repo的办法,还需简单魔改一下。

前言

关于repo最详尽的知识,在这里不再赘述,详情参考本人文章:《深入学习Repo》

使用repo有以下几个痛点:

  • python版本不对,会影响使用,需要切换

  • 每次使用会默认拉取最新代码,国内没法访问google,然后卡死在这

  • repo用apt安装默认在usr/bin/下面,容易被同服务器的操作干扰,而突然失效/出问题

  • 有的项目用的是repo2有的项目用的是repo3,每次都要去确认,然后选择用哪个

由于repo分别有python2.7和python3+的版本,在文章下面我们统称为repo2和repo3

各用各的repo

repo本质上是一个python代码编译出的linux二进制文件。

如果使用apt来安装repo,将会默认安装在usr/bin/

在linux服务器中,如果有用户更新、替换了repo,甚至切换了python,那可能会影响另一个用户的行为。

所以解决方案是:

git clone git@xxx.net:/git-repo.git
cd git-repo/
mkdir ~/bin/
cp repo ~/bin/
chmod a+x ~/bin/repo

这样就互不干涉,比如用户abc,用的repo就在/home/abc/bin/repo下面

并且将这个bin加入环境变量PATH:

PATH=~/bin:$PATH

由于repo有2和3两个版本,

如果适用python2,我们就命名为repo2;

如果适用python3,我们就命名为repo3;

下面我们会讲解如何解决不同的repo要使用不同的python版本的问题。

git clone git@xxx.net:/git-repo2.git
cd git-repo2/
mkdir ~/bin/
cp repo ~/bin/repo2
chmod a+x ~/bin/repo2git clone git@xxx.net:/git-repo3.git
cd git-repo3/
mkdir ~/bin/
cp repo ~/bin/repo3
chmod a+x ~/bin/repo3

定制repo2/repo3源码

repo每次都会拉取更新最新的repo版本,但是很多内容的更新,并不一定对我们普通工程师有影响。

所以,提出了一个大胆的想法,将repo单独领出来,建一个自己的仓库,而不去goole的源码地址拉取,不然国内老提示无法访问。

以下是本人的仓库

https://github.com/KingofHubGit/git-repo2

https://github.com/KingofHubGit/git-repo3

对于google官方的源码做了以下几处修改:

  • 修改每次拉取的源为我自己的github地址:

    REPO_URL = "git@github.com:KingofHubGit/git-repo3.git"
    
  • 修改每次拉取的源为我自己的github分支:

    REPO_REV = "main"
    

    由于早期项目都是默认master分支,现在改为main分支了。所以此处要更新。

  • 使用repo过程中,发现python脚本不对,我们就会使用以下命令:

    sudo update-alternatives --config python
    

    如果老是切换python版本,这样会影响别人,影响android源码的编译

    所以针对于repo3,将python环境变量改为

    #!/usr/bin/env python3
    

    针对于repo2,将python环境变量改为

    #!/usr/bin/env python2
    
  • 虽然github国内可以访问,也经常抽搐,可以改成gitee。

    最根本的方法是直接不要再拉取最新的源码啦!

    默认关闭拉取源码:

    group.add_option("--no-repo-verify",dest="repo_verify",default=False,action="store_false",help="do not verify repo source code",)def check_repo_verify(repo_verify=False, quiet=False):
    

自动识别repo2/repo3项目

有了上面的定制化修改,不用再切换python版本啦!

但如果项目A的源码用repo2, 项目B的源码用了repo3,那可咋整啊,每次repo2和repo3要改来改去,最初的repo呢?

针对于这个,这里提出了一个妙招:

可以在~/.bashrc下面增加一个repo的函数方法,用于判断识别项目是repo2还是repo3,然后调用对应的repo:

repo(){#echo "$@"#确认已经是repo项目了if [ -f "./.repo/repo/repo" ]; then#判断是否为repo2is_repo2=`grep 'MIN_PYTHON_VERSION.*2,' ./.repo/repo/repo | wc -l`#echo "is_repo2="$is_repo2if [ "$is_repo2" == "1" ];then echo "repo2 working"#调用~/bin/repo2eval "~/bin/repo2 $@ "elseecho "repo3 working"#调用~/bin/repo3eval "~/bin/repo3 $@"fielse#默认使用~/bin/repo3echo "repo3 working"eval "~/bin/repo3 $@"fi
}

完整解决方案:

  • 拉取repo2
git clone git@github.com:KingofHubGit/git-repo2.gitcd git-repo2/
mkdir ~/bin/
PATH=~/bin:$PATH
cp repo ~/bin/repo2
chmod a+x ~/bin/repo2
  • 拉取repo3
git clone git@github.com:KingofHubGit/git-repo3.gitcd git-repo3/
mkdir ~/bin/
PATH=~/bin:$PATH
cp repo ~/bin/repo3
chmod a+x ~/bin/repo3
  • 将代码块添加到~/.bashrc下面
repo(){if [ -f "./.repo/repo/repo" ]; thenis_repo2=`grep 'MIN_PYTHON_VERSION.*2,' ./.repo/repo/repo | wc -l`#echo "is_repo2="$is_repo2if [ "$is_repo2" == "1" ];then echo "repo2 working"eval "~/bin/repo2 $@ "elseecho "repo3 working"eval "~/bin/repo3 $@"fielseecho "repo3 working"eval "~/bin/repo3 $@"fi
}
  • 重新加载环境
source ~/.bashrc
  • 实践出真知:

拉取repo项目,默认使用repo3

image-20240309183238623

这里是一个repo2项目:

image-20240309183547838

从所未有的干净清爽!

注意:如果bash具有repo函数了,理论上优先级高于usr/bin/repo,为了以防万一有干扰,可以尝试将usr/bin/repo重命名为usr/bin/repo_google。

如果这篇文章对你有用的话,麻烦留下你的关注,我将持续亮剑干货!

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

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

相关文章

rust开发100问?

Rust如何管理内存?Rust的所有权是什么?生命周期在Rust中如何工作?什么是借用在Rust中?如何在Rust中创建枚举类型?Rust中的trait是什么?如何定义并实现一个结构体(struct)的方法&…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记05_共谋(中)

1. 默许共谋 1.1. 又称寡头价格协调(Oligopolistic Price Coordination)或有意识的平行行为(Conscious Parallelism) 1.1.1. 在条件允许的情况下,它会发生在市场集中度较高的行业当中 1.1.…

微信小程序返回上一页刷新组件数据

在父页面的onShow和onHide里面添加一个标志 onShow() {this.setData({show:true})},onHide() {this.setData({show:false})}, 把这个值传给子组件 <importantList slot"importantConcern" flag"{{barSelect}}" flag2"{{show}}" /> 在子组…

论文笔记 Where Would I Go Next? Large Language Models as Human Mobility Predictor

arxiv 2023 08的论文 1 intro 1.1 人类流动性的独特性 人类流动性的独特特性在于其固有的规律性、随机性以及复杂的时空依赖性 ——>准确预测人们的行踪变得困难近期的研究利用深度学习模型的时空建模能力实现了更好的预测性能 但准确性仍然不足&#xff0c;且产生的结果…

kotlin图片合成和压缩

kotlin图片合成和压缩 之前的方法是继承AsyncTask 在doInBackground 里面去做压缩的操作&#xff0c;然后用 publishProgress 切到主线程里面更新 新方法是在协程里的去做 class ImageService {private fun getSumWidths(bitmaps: ArrayList<Bitmap>): Int {var sumWid…

爬虫(五)

1. 前端JS相关 三元运算 v1 条件 ? 值A : 值B; # 如果条件成立v1值A&#xff0c;不成立v1等于值Bres 1 1 ? 99 : 88 # res99特殊的逻辑运算 v1 11 || 22 # Ture v2 9 || 14 # 9 v3 0 || 15 # 15 v3 0 || 15 || "zhangfei" # 15赋值和…

201909 青少年软件编程(Scratch)等级考试试卷(一级)

第1题&#xff1a;【 单选题】 小明在做一个采访的小动画&#xff0c;想让主持人角色说“大家好&#xff01;”3秒钟&#xff0c;用下列程序中的哪一个可以实现呢&#xff1f;&#xff08; &#xff09; A: B: C: D: 【正确答案】: B 【试题解析】 : 第2题&#xff1a…

领域模型设计-COLA架构

前言 当我们需要创建的新应用的时候&#xff0c;往往需要站在一个长远的角度来设计我们的系统架构。有时候我们接手一个老的应用的时候&#xff0c;会发现由于创建之初没有好好规划系统架构&#xff0c;导致我们后期开分成本和维护成本都非常高。近些年来领域模型的系统设计非常…

《AI歌手:音乐产业的未来之音?》

引言 随着人工智能技术的快速发展,AI歌手作为一种新兴的演艺模式逐渐走进了人们的视野。AI歌手以其独特的魅力和无限的潜力引发了人们对于音乐产业未来的思考。本文将围绕AI歌手的音乐呈现、市场认可、替代性以及其他类似AI应用等方面展开讨论,探究AI歌手是否有望成为音乐产…

Rust 中有哪些实现了 std::error::Error 的类型?

在 Rust 中&#xff0c;std::error::Error trait 被许多内置类型和第三方库中的类型所实现。以下是一些实现了 std::error::Error trait 的常见类型&#xff1a; 内置类型 std::io::Error&#xff1a;用于表示 I/O 操作中的错误&#xff0c;如文件读写错误或网络操作错误。 s…

Matlab|10节点潮流计算程序(通用性强)

主要内容 潮流计算程序matlab 牛拉法 采用matlab对10节点进行潮流计算&#xff0c;采用牛拉法&#xff0c;程序运行可靠&#xff0c;牛拉法实现通用性强&#xff0c;可替换参数形成其他节点系统的潮流计算程序。 下载链接

如何选择低代码开发平台?必看注意事项揭秘!

低代码开发平台和零代码开发平台是近几年时兴的一种新的程序开发方法。该模式的特征是可以使用用户界面、拖拽操作等方式快速构建应用软件软件&#xff0c;从而减少开发者的学习标准&#xff0c;使每个人都能变成开发者。 在选择低代码开发平台时&#xff0c;要确保平台能够满足…

DDoS和CC攻击的原理

目前最常见的网络攻击方式就是CC攻击和DDoS攻击这两种&#xff0c;很多互联网企业服务器遭到攻击后接入我们德迅云安全高防时会问到&#xff0c;什么是CC攻击&#xff0c;什么又是DDoS攻击&#xff0c;这两个有什么区别的&#xff0c;其实清楚它们的攻击原理&#xff0c;也就知…

攻击技术:命令和控制服务器(C2)是什么意思

在攻击者使用的众多策略中&#xff0c;最阴险的策略之一是命令和控制服务器&#xff08;C2&#xff09;。通过这篇文章&#xff0c;我们想准确地解释它是什么。 这些服务器充当计算机黑客行动的大脑&#xff0c;协调受感染设备的操作并允许攻击者随意操纵它们。 在网络安全领…

AJAX学习(一)

版权声明 本文章来源于B站上的某马课程&#xff0c;由本人整理&#xff0c;仅供学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;本人致力于维护原创作品的权益&#xff0c;共同营造一个尊重知识…

Apache的运用与实战

WEB服务器 1、WEB服务简介 # 目前最主流的三个Web服务器是Apache、Nginx、 IIS。 - WEB服务器一般指网站服务器&#xff0c;可以向浏览器等Web客户端提供网站的访问&#xff0c;让全世界浏览。 - WEB服务器也称为WWW(WORLD WIDE WEB)服务器&#xff0c;主要功能是提供网上信息…

Feign实现微服务间远程调用续;基于Redis实现消息队列用于延迟任务的处理,Redis分布式锁的实现;(黑马头条Day05)

目录 延迟任务和定时任务 使用Redis设计延迟队列原理 点评项目中选用list和zset两种数据结构进行实现 如何缓解Redis内存的压力同时保证Redis中任务能够被正确消费不丢失 系统流程设计 使用Feign实现微服务间的任务消费以及文章自动审核 系统微服务功能介绍 提交文章-&g…

设计模式学习笔记 - 规范与重构 - 1.什么情况下要重构?重构什么?又该如何重构?

简述 “重构” 这个词大家都不陌生&#xff0c;但是 “听得多做得少”&#xff0c;真正进行过代码重构的人少之又少。 一方面&#xff0c;重构代码对一个工程师能力的要求&#xff0c;要比单纯写代码高的多。重构需要你能洞察出代码存在的坏味道或设计上的不足&#xff0c;并…

stable diffusion 零基础入门教程

一、前言 Midjourney 生成的图片很难精准的控制&#xff0c;随机性很高&#xff0c;需要大量的跑图&#xff0c;但Stable Diffusion可以根据模型较精准的控制。 SD 效果图展示&#xff1a; 二、Stable Diffusion 介绍 Stable Diffusion 是一款基于人工智能技术开发的绘画软件…

IM6ULL学习总结(四-七-1)输入系统应用编程

第7章 输入系统应用编程 7.1 什么是输入系统 ⚫ 先来了解什么是输入设备&#xff1f; 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。 ⚫ 什么是输入系统&#xff1f; 输入设备种类繁多&#xff0c;能否统一它们的…