repo 文件详解
- 格式:docx
- 大小:18.54 KB
- 文档页数:3
repo代码简单解读
1. repo脚本是作为整个repo⼯具的⼊⼝,主要负责repo环境的初始化和克隆出repo库。
repo有两端if __name==‘__main__': 位于开始部分主要是给shell执⾏⽤,就是把repo脚本当shell脚本跑,末尾的那段是给python执⾏⽤的。
主⽅法:main
a. 环境初始化 _FindRepo()
找到repo脚本所在的⽬录,⼀般都是⽤户主⽬录下的bin⽬录中,寻找main.py⽂件
b. 分析命令⾏参数 _ParseArguments()
分析出哪些是命令,哪些是参数
c. 本次执⾏涉及的脚本和⽬录是否存在 _RunSelf()
主要查找git_config.py/project.py/subcmds
d. 设定默认值
c. 做repo的克隆或者更新 __Init()
repo并不是做的克隆,⽽是先在本地创建⼀个空的repo库,然后设置注册远程库,最后做更新
2. main.py负责具体命令的执⾏,包括manifests库的克隆的检出。
main.py的结构和repo脚本类似
主⽅法: _Main
1. ssh验证 gitconfig ⽤户名,邮箱地址验证 init_ssh()
2. ⽹络验证 init_http()
3. 解析manifest.xml 没有指定的就是要默认名称
4. 通过getattr ⽅式执⾏命令 _Run() 根据命令的名称,执⾏subcmds下对应的⽂件。
秘密就在subcmds/__init__.py⽂件⾥。
repo命令的参数包括:
•repo init -u -b -m <manifest 文件名称>:这个命令相当于git clone,用于获取git remote update,可以加上-b参数来指定默认分支。
•repo sync:这个命令相当于git clone 获取git remote update 和git
rebase origin/branch。
它的参数包括:
•-c:只从服务器端获取当前分支。
•-d:分离头指针状态,切换到指定提交,丢弃工作区修改。
•-f:即使某个项目失败,也同步其他的。
•-n:只网络操作git fetch。
•-l:只本地操作git checkout。
•-j :并发数。
repo download [options] <change_number>/<patch_id> 默认使用checkout检出,选项包括:
•-c:使用cherry-pick 命令检出。
•-r:撤销评审的提交。
repo forall [project-list] -c command 的参数包括:
•-c:要运行的命令和参数。
•-e:一个命令失败,全部失败。
•-p:在输出结果之前显示项目标头。
•-r :正则匹配到的项目执行。
•-i :正则没有匹配到的项目执行。
以上是repo命令的参数介绍,供参考,建议查阅相关使用手册或帮助文档了解更多信息。
Repo Tutor1 什么是repor epo只是google用Python脚本写的调用git的一个脚本,主要是用来下载、管理Android项目的软件仓库。
既然repo是google用来管理Android的工具,那跟我们有什么关系呢?好用,所以就拿过来呗,反正不要钱。
使用repo还是因为我们的版本控制迁移到了git上来管理,由于git的一些局限性,如果没有repo,要管理项目仓库会很繁琐。
2 repo在公司项目上的使用2.0 git的安装Ubuntu上直接sudo apt-get install git-core git-doc就ok了,git-core就是git,git-doc 是帮助文档。
2.1 获取repo标准的repo当然是在google家了,我们这里需要用公司修改定制的repo。
这个实际上就是一个脚本,我们获取的repo可以说只是一个引导脚本,整个repo 是一系列的脚本,我们将会在后面看到。
将这个repo放到你的/usr/local/bin下,chmod a+x repo 加上可执行权限。
2.2 ssh密钥生成我们的项目git共享仓库采用ssh协议传输,这里生成一对ssh密钥,将公钥加到服务器上,就可以实现免密码了。
生成pub key:执行ssh-keygen -t rsa,一直回车会在你的home目录的.ssh/目录下生成id_rsa.pub(公钥)和id_rsa(私钥)。
将id_rsa.pub发送给系统管理员就可以了。
当我们用ssh协议和服务器通信的时候,就使用这一对密钥进行认证,这样就不用每次都输入密码了。
2.3 使用repo初始化本地仓库有了以上的基础工作后,我们就可以使用repo来初始化本地仓库了。
作为演示,这里创建一个test的目录创建一个test目录zenghui@ubuntu:~/git$ mkdir testzenghui@ubuntu:~/git$ cd test/使用repo初始化:zenghui@ubuntu:~/git/test$ repo init -u git@:linux-sunniwell.git/projects/huawei-base-manifest.git -b develop-u参数指定url-b 参数指定分支,你需要用哪个分支就写哪个分支,从之后的命令可以看出我们现在有以下的分支:* [new branch] ctc30 -> origin/ctc30* [new branch] develop -> origin/develop* [new branch] ipv6 -> origin/ipv6* [new branch] master -> origin/master* [new branch] widening -> origin/widening我们这里使用的就是develop分支。
Repo Tutor1 什么是repor epo只是google用Python脚本写的调用git的一个脚本,主要是用来下载、管理Android项目的软件仓库。
既然repo是google用来管理Android的工具,那跟我们有什么关系呢?好用,所以就拿过来呗,反正不要钱。
使用repo还是因为我们的版本控制迁移到了git上来管理,由于git的一些局限性,如果没有repo,要管理项目仓库会很繁琐。
2 repo在公司项目上的使用2.0 git的安装Ubuntu上直接sudo apt-get install git-core git-doc就ok了,git-core就是git,git-doc是帮助文档。
2.1 获取repo标准的repo当然是在google家了,我们这里需要用公司修改定制的repo。
Repo这个实际上就是一个脚本,我们获取的repo可以说只是一个引导脚本,整个repo是一系列的脚本,我们将会在后面看到。
将这个repo放到你的/usr/local/bin下,chmod a+x repo 加上可执行权限。
2.2 ssh密钥生成我们的项目git共享仓库采用ssh协议传输,这里生成一对ssh密钥,将公钥加到服务器上,就可以实现免密码了。
生成pub key:执行ssh-keygen -t rsa,一直回车会在你的home目录的.ssh/目录下生成id_rsa.pub(公钥)和id_rsa(私钥)。
将id_rsa.pub发送给系统管理员就可以了。
当我们用ssh协议和服务器通信的时候,就使用这一对密钥进行认证,这样就不用每次都输入密码了。
2.3 使用repo初始化本地仓库有了以上的基础工作后,我们就可以使用repo来初始化本地仓库了。
作为演示,这里创建一个test的目录创建一个test目录zenghui@ubuntu:~/git$ mkdir testzenghui@ubuntu:~/git$ cd test/使用repo初始化:zenghui@ubuntu:~/git/test$ repo init -u git@:linux-sunniwell.git/projects/huawei-base-manifest.git -b develop-u参数指定url-b 参数指定分支,你需要用哪个分支就写哪个分支,从之后的命令可以看出我们现在有以下的分支:* [new branch] ctc30 -> origin/ctc30* [new branch] develop -> origin/develop* [new branch] ipv6 -> origin/ipv6* [new branch] master -> origin/master* [new branch] widening -> origin/widening我们这里使用的就是develop分支。
repo 详解repo remote project revision1. 引言1.1 概述在软件开发的过程中,代码管理是至关重要的一步。
为了更加高效地管理和维护代码,我们需要使用版本控制系统(Version Control System,简称VCS),而repo(也称为Google Repo)正是其中一种广泛使用的版本控制工具。
本文将详解repo的相关概念、用法以及与远程项目和revision的关系。
1.2 文章结构本文主要分为五个部分来介绍repo:引言、repo详解、repo remote项目、repo revision以及结论。
在引言部分,我们将对整篇文章做一个总览性的介绍;而后面的各部分将会逐一详细讲解与repo相关的概念和操作方法。
1.3 目的本文旨在帮助读者全面了解repo,并学会如何正确地利用它来进行代码管理。
通过学习repo基本的使用方法,配置和管理远程项目以及版本控制流程示例,读者将能够更好地掌握代码仓库管理技巧,并提高团队协作效率。
以上就是文章“1. 引言”部分内容的清晰撰写,请核对确认是否满足您的需求。
2. repo 详解2.1 什么是repo在软件开发中,repo(即repository)指的是存储项目源代码、配置文件和相关资源的集中位置。
它是一个版本控制系统,可以跟踪文件的修改历史,并且允许多人协作开发同一个项目。
2.2 repo的作用和特点Repo具有以下几个重要作用和特点:- 版本控制:Repo可以记录项目代码和资源的每一次修改,并保存不同版本之间的差异。
- 协作开发:多人可以同时使用Repo来管理和维护一个项目,便于团队合作。
- 分支管理:Repo支持分支操作,使得团队成员可以在不干扰主线代码的情况下进行独立开发和实验。
- 冲突解决:当不同成员对同一部分代码进行修改时,Repo可以自动识别并帮助解决冲突。
- 回滚与恢复:由于每一次修改都被记录下来,Repo提供了回滚到历史版本以及恢复删除文件等功能。
yum的repo的配置⽂件说明
[base]:容器名称,⼀定要放在[]中。
name:容器说明,可以⾃⼰随便写。
mirrorlist:镜像站点,这个可以注释掉。
baseurl:我们的 yum 源服务器的地址。
默认是 CentOS 官⽅的 yum 源服务器,是可以使⽤的。
如果你觉得慢,则可以改成你喜欢的 yum 源地址。
enabled:此容器是否⽣效,如果不写或写成 enabled 则表⽰此容器⽣效,写成 enable=0 则表⽰此容器不⽣效。
gpgcheck:如果为 1 则表⽰ RPM 的数字证书⽣效;如果为 0 则表⽰ RPM 的数字证书不⽣效。
gpgkey:数字证书的公钥⽂件保存位置
baseurl=/centos/$releasever/os/$basearch/ 中 $releasever 和 $basearch的值是
$releasever是系统版本使⽤ uname -a 查看
$basearch是操作系统位数使⽤ arch 命令查看。
repo⽤法详解Android 为企业提供⼀个新的市场,⽆论⼤企业,⼩企业都是处于同⼀个起跑线上。
研究 Android 尤其是 Android 系统核⼼或者是驱动的开发,⾸先需要做的就是本地克隆建⽴⼀套 Android 版本库管理机制。
Android 使⽤ Git 作为代码管理⼯具,开发了 Gerrit 进⾏代码审核以便更好的对代码进⾏集中式管理,还开发了 Repo 命令⾏⼯具,对 Git 部分命令封装,将百多个 Git 库有效的进⾏组织。
要想克隆和管理这百多个 Git 库,还真不是⼀件简单的事情。
在研究 Repo 的过程中,发现很多⽂档在 Google Group 上,⾮“FQ”不可看。
⾮法的事情咱不⼲,直接阅读 repo 的代码吧。
创建本地 Android 版本库镜像的思路如果了解了 Repo 的实现,参考 , 建⽴⼀个本地的 android 版本库镜像还是不难的:下载 repo bootstrap 脚本$ curl /repo >~/bin/repo$ chmod a+x ~/bin/repo$ export PATH=$PATH:~/bin提供 –mirror 参数调⽤ repo init ,建⽴ git 版本库克隆$ repo init -u git:///platform/manifest.git --mirror使⽤ –morror 则下⼀步和源同步的时候,本地按照源的版本库组织⽅式进⾏组织,否则会按照 manifest.xml 指定的⽅式重新组织并检出到本地开始和源同步$ repo sync修改 manifest ,修改 git 库地址,指向本地的 git 服务器修改 platform/manifest.git 库中现有的 xml ⽂件,或者创建⼀个新的 xml ⽂件将 git 的地址改为本地地址,提交并 push本地 repo 镜像建⽴完毕之后,就可以在执⾏ repo init 时,使⽤本地更改后的 manifest 库,之后执⾏ repo sync 就是基于本地版本库进⾏同步了。
repo用法在软件开发中,代码仓库(repo)是一个非常重要的环节,它是代码存储的地方,可以有效地组织和管理代码。
本文将围绕“repo用法”进行讲解。
1. 创建repo首先,我们需要创建一个repo。
在GitHub中,我们可以通过点击页面右上角“+”符号中的“New repository”创建一个新的代码仓库。
接着,我们需要为repo设置一个名称和描述,选择公共或私有仓库(需要付费),选择使用或不使用.gitignore和license等。
2. 克隆repo当repo已经创建好后,我们需要将它克隆到本地电脑上进行开发。
在GitHub中,可以通过以下命令将repo克隆到本地:$**********************:username/repo.git其中,username代表GitHub账户的用户名,repo代表代码仓库的名称。
执行命令后,代码库就会被克隆到本地目录。
3. 添加代码克隆repo到本地后,我们就可以开始添加代码了。
在本地对代码进行修改后,需要提交更改并推送到远程仓库。
首先,我们需要将文件添加到本地代码库中,可以使用以下命令:$ git add FileName其中,FileName代表需要添加到代码库的文件名。
接着,我们需要提交更改,可以使用以下命令:$ git commit -m "Commit Message"其中,“Commit Message”是本次提交的注释信息。
最后,我们需要将更改推送到远程仓库,可以使用以下命令:$ git push origin master其中,“origin”代表远程代码库的名称,“master”代表分支名称。
4. 合并代码当多个开发人员并行开发时,我们需要将代码合并到一起。
在Git中,可以使用以下命令将其他分支合并到当前分支中:$ git merge BranchName其中,“BranchName”代表要合并的分支名称。
repo的⼏个使⽤理解1. repo sync同步最新本地⼯作⽂件,更新成功,这本地⽂件和 server 的代码是⼀样的。
可以指定需要更新的project ,如果不指定任何参数,会同步整个所有的项⽬。
如果是第⼀次运⾏ repo sync ,则这个命令相当于 git clone,会把server所有内容都拷贝到本地。
根据manifests中的xml⽂件中git的commit 进⾏同步,这个再repo init的时候指定使⽤哪个xml;如果不是第⼀次运⾏ repo sync ,则相当于 git remote update ; git rebase origin/branch .将server上的code与本地合并;repo sync 会更新.repo 下⾯的⽂件。
如果在merge 的过程中出现冲突,这需要⼿动运⾏:git rebase --continue2. repo branchrepo分⽀:这⾥通过repo init -b <branch>,中的-b所指定的分⽀,是manifests的分⽀,不同分⽀,其中的⽂件清单内容有所不同。
xml分⽀:通过清单⽂件manifest.xml中的default实体的revision属性,指定版本库默认的分⽀为revision属性值,该属性值做为repo sync之后⼯作⽬录中所有git项⽬的公共起点分⽀,也就是说,该manifest对应所有的git项⽬都有⼀个以revision属性值为名的分⽀,repo sync之后,在任意⼀个repo⼯作⽬录下的git库中,使⽤git branch或者repo start创建的分⽀,都是基于该git库中revision属性值为名的分⽀来创建。
我们可以将这个分⽀设置为和repo分⽀类似的名字。
3. repo start使⽤repo start -all创建分⽀,基于xml⽂件的commit和branch进⾏创建,使⽤repo checkout 之后将会变成以repo init 初始化指定的xml⽂件的所有时期软件的commit,相当于恢复到之前的⼀个软件版本;。
*.repo 文件详解
/fangzhenxiaoyao/blog/item/b960ec012a3027e109fa93e4.html
什么是repo文件?
repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!
YUM的工作原理并不复杂,每一个RPM软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装哪些基础软件。
也就是说,在服务器上面先以分析工具将所有的RPM档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的文件,就可以知道所有相关联的软件。
所以YUM的基本工作流程如下:
服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW 或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。
vi /etc/yum.conf
[main]
cachedir=/var/cache/yum
#cachedir:yum缓存的目录,yum在此存储下载的rpm包和数据库,一般是/var/cache/yum。
debuglevel=2
#debuglevel:除错级别,0──10,默认是2 貌似只记录安装和删除记录
logfile=/var/log/yum.log
pkgpolicy=newest
#pkgpolicy:包的策略。
一共有两个选项,newest和last,这个作用是如果你设置了多个repository,而同一软件在不同的repository中同时存在,yum应该安装哪一个,如果是newest,则yum会安装最新的那个版本。
如果是last,则yum会将服务器id以字母表排序,并选择最后的那个服务器上的软件安装。
一般都是选newest。
distroverpkg=centos-release
#指定一个软件包,yum会根据这个包判断你的发行版本,默认是redhat-release,也可以是安装的任何针对自己发行版的rpm包。
tolerant=1
#tolerent,也有1和0两个选项,表示yum是否容忍命令行发生与软件包有关的错误,比如你要安装1,2,3三个包,而其中3此前已经安装了,如果你设为1,则yum不会出现错误信息。
默认是0。
exactarch=1
#exactarch,有两个选项1和0,代表是否只升级和你安装软件包cpu体系一致的包,如果设为1,则如你安装了一个i386的rpm,则yum不会用1686的包来升级。
retries=20
#retries,网络连接发生错误后的重试次数,如果设为0,则会无限重试。
obsoletes=1
gpgcheck=1
#gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。
reposdir=/etc/yy.rm #默认是/etc/yum.repos.d/ 低下的xx.repo后缀文件
#默认都会被include 进来也就是说/etc/yum.repos.d/xx.repo无论配置文件有多少个每个里面有多少个[name] 最后其实都被整合到一个里面看就是了重复的[name]后面的覆盖前面的exclude=xxx
#exclude 排除某些软件在升级名单之外,可以用通配符,列表中各个项目要用空格隔开,这个对于安装了诸如美化包,中文补丁的朋友特别有用。
keepcache=[1 or 0]
#设置keepcache=1,yum 在成功安装软件包之后保留缓存的头文件(headers) 和软件包。
默认值为keepcache=0 不保存
reposdir=[包含.repo 文件的目录的绝对路径]
#该选项用户指定.repo 文件的绝对路径。
.repo 文件包含软件仓库的信息(作用与/etc/yum.conf文件中的[repository] 片段相同)。
第二部分:
vi /etc/yum.repo.d/xx.repo
这个字段其实也可以在yum.conf里面直接配置
[serverid]
#其中serverid是用于区别各个不同的repository,必须有一个独一无二的名称。
重复了前面覆盖后面--还是反过来呢???用enabled 测试是后面覆盖前面
name=Some name for this server
#name,是对repository的描述,支持像$releasever $basearch这样的变量; name=Fedora Core $releasever - $basearch - Released Updates
baseurl=url://path/to/repository/
#baseurl是服务器设置中最重要的部分,只有设置正确,才能从上面获取软件。
它的格式是:baseurl=url://server1/path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
#其中url支持的协议有http:// ftp:// file://三种。
baseurl后可以跟多个url,你可以自己改为速度比较快的镜像站,但baseurl只能有一个,也就是说不能像如下格式:
baseurl=url://server1/path/to/repository/
baseurl=url://server2/path/to/repository/
baseurl=url://server3/path/to/repository/
其中url指向的目录必须是这个repository header目录的上一级,它也支持$releasever $basearch这样的变量。
#mirrorlist=/mirrorlist?repo=fedora-$releasever&arch=$basearc h
#上面的这一行是指定一个镜像服务器的地址列表,通常是开启的,本例中加了注释符号禁用了,我们可以试试,将$releasever和$basearch替换成自己对应的版本和架构,例如10和
i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。
url之后可以加上多个选项,如gpgcheck、exclude、failovermethod等,比如:
gpgcheck=1
exclude=gaim
#其中gpgcheck,exclude的含义和[main]部分相同,但只对此服务器起作用,failovermethod=priority
#failovermethode有两个选项roundrobin和priority,意思分别是有多个url可供选择时,yum 选择的次序,roundrobin是随机选择,如果连接失败则使用下一个,依次循环,priority则根据url的次序从第一个开始。
如果不指明,默认是roundrobin。
enabled=[1 or 0]
#当某个软件仓库被配置成enabled=0 时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源。
使用这个选项,可以启用或禁用软件仓库。
#通过yum 的--enablerepo=[repo_name] 和--disablerepo=[repo_name] 选项,或者通过PackageKit的"添加/删除软件"工具,也能够方便地启用和禁用指定的软件仓库
几个变量
$releasever,发行版的版本,从[main]部分的distroverpkg获取,如果没有,则根据redhat-release包进行判断。
$arch,cpu体系,如i686,athlon等
$basearch,cpu的基本体系组,如i686和athlon同属i386,alpha和alphaev6同属alpha。
对yum.conf设定完成,我们就可以好好体验yum带来的方便了。
还有一件事没有做。
那就是导入每个reposity的GPG key,前面说过,yum可以使用gpg对包进行校验,确保下载包的完整性,所以我们先要到各个repository站点找到gpg key,一般都会放在首页的醒目位置,一些名字诸如RPM-GPG-KEY.txt之类的纯文本文件,把它们下载,然后用rpm --import xxx.txt命令将它们导入,最好把发行版自带GPG-KEY也导入,rpm --import /usr/share/doc/redhat-release-*/RPM-GPG-KEY 官方软件升级用的上。
参考:/iris_chow/blog/item/0b414613de76b1c2c3fd788d.html
/627289/128325。