创建自己的Repo Server[通俗易懂]

创建自己的Repo Server

大家好,又见面了,我是全栈君。

     非常久曾经出于好奇细致了解了下Repo及server的原理,可是今天突然发现有些忘了。于是想记录下来。


Repo机制


    Repo是google官方为管理Android项目开发出来的一个软件。

我们先来看下官方对该软件的描写叙述。

Repo is a tool thatwe built on top of Git. Repo helps us manage the many Git repositories, doesthe uploads to our revision control system, and automates parts of the Androiddevelopment workflow. Repo is not meant to replace Git, only to make it easierto work with Git in the context of Android. The repo command is an executablePython script that you can put anywhere in your path

    从上面能够看出,repo本身并不负责项目的管理(记录项目的更新,回退更新等)。它仅仅是一个基于git之上的工具,用来管理多个git项目的便捷工具。它是用python实现。

      我们知道Android里面的各个模块是用git来管理的,Android里有大量的这样的模块,多达200多个。假设用户一个一个的使用git pull/fetch去更新每一个git项目,那任务量太大了,同一时候用户还必须知道每一个git相应的branch信息。Repo工具就为解决问题的,它借助一个manifest.git项目列出了全部被管理的git的信息,包含文件夹结构,branch。获取地址等等。


Repo干了什么事


        我们运行repo时通常是使用例如以下命令:

       repo init –u /media/itleaks/git/repositories/platform/manifest.git

       -u 后面的參数是重点。当用户运行这条命令后,repo工具相当于运行了

mkdir .repo
cd .repo
git clone /media/itleaks/git/repositories/platform/manifest.git

       我们来看下一个android repo项目的manifest.git的内容:

itleaks@Itleaks:/media/itleaks/source/4.4$ cat .repo/manifests/.git/config |more
[core]
	repositoryformatversion = 0
	filemode = true
[remote "origin"]
	url = /media/itleaks/git/repositories/platform/manifest.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[repo]
	reference = /media/itleaks/git/mirror/android.googlesource.com/
[branch "default"]
	remote = origin
	merge = master

itleaks@Itleaks:/media/itleaks/source/4.4$ cat .repo/manifests/default.xml |more
<?xml version="1.0" encoding="UTF-8"?

><manifest> //能够定义多个remote <remote name="aosp" review="review.source.android.com" //这个就是获取git的server地址,这里是一个相对文件夹.. //刚刚我们提到过,manifests本身也是一个git项目,它自然就有地址 //这个..指出以下的全部git项目的根文件夹在manifests项目文件夹的上层文件夹,即 // /media/itleaks/git/repositories/ fetch=".." /> //默认的remote就是上面的aosp <default revision="refs/tags/android-4.4_r1" remote="aosp" sync-j="4" /> //项目路径,项目名称 //这个描写叙述运行后,相当于用户运行例如以下两条命令 // cd ROOTDIR/art // git clone /media/itleaks/git/repositories/platform/platform/art <project path="art" name="platform/art" /> <project path="bionic" name="platform/bionic" groups="pdk" /> <project path="bootable/bootloader/legacy" name="platform/bootable/bootloader/legacy" /> <project path="bootable/diskinstaller" name="platform/bootable/diskinstaller" /> <project path="bootable/recovery" name="platform/bootable/recovery" groups="pdk" /> <project path="cts" name="platform/cts" groups="cts" /> <project path="dalvik" name="platform/dalvik" />

        然后用户运行repo sync后才開始真正依照上面描写叙述的规则下载全部代码项目。即循环运行git clone /media/itleaks/git/repositories/platform/xx

建立repo server


 从零開始建立reposerver

        从上能够看出,建立repo server的核心是建立manifest.git项目。

//创建文件夹
mkdir /tmp/git/repositories/platform -p
cd /tmp/git/repositories/platform
//建立測试git test
mkdir test;git init;touch 1.txt;git add .;git commit –asm “initial version”
//建立測试git test1
mkdir test1;git init;touch 2.txt;git add .;git commit –asm “initial version”
//建立manifest git
mkdir manifest;git init;touch default.xml;git add .;git commit –asm “initial version”
然后改动default.xml,输入例如以下信息
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote  name="test "
           fetch="."
           review="https://android-review.googlesource.com/" />
  <default revision="master"
           remote="test"
           sync-j="4" />

  <project path="test" name="test"/>
  <project path="test1" name="test1" /> 
</manifest>
这样就建好。提交
git commit –asm “add real content”

        运行完上面的操作后。我们就能够使用这个repo server了

        本地用户仅仅需运行:repo –u /tmp/git/repositories/platform/manifest就可下载这个reposerver的项目代码。

         远程机器通过:repo –u ssh:ip:/tmp/git/repositories/platform/manifest


优化repo server数据内容


         上面的方法有一个非常不好的就是这个server下的每一个git项目是有冗余信息的。

由于reposerver里是不须要直接操作git项目里的内容的,往往是repo client改动代码后提交上去来改动server的数据。因此git提供了一个—bare參数来优化git server的数据。即git server端全部内容以二进制管理。所以上面的repo server的生成应该是这样。

以test git 为例:

以下的命令

    cd /tmp/git/repositories/platform;mkdir test;gitinit;touch 1.txt;git add .;
    git commit –asm “initial version”

需改为:

//建立client git
     cd /tmp;mkdir test;git init;touch 1.txt;git add .;gitcommit –asm “initial version”
//建立server git
     cd/tmp/git/repositories/platform;git clone /tmp/test –bare;

       这样在server文件夹/tmp/git/repositories/platform下的全部git的数据都是优化过的。


利用已有repo建立自己的repo server


       这个方式是非常实用的,比方一家公司进行android项目开发。首先肯定是须要下载aosp的base code,然后在上面进行一些改动。公司在内部建立一个repo sever,其它全部的员工直接从公司的这个repo server下载代码。而不是从google官方下载。这首先是提高了下载速度,本地局域网下载肯定比远程下载快。

        其实,不论什么一个已有的repo经过简单改动都能够变为一个reposerver.比方假设一用户通过运行以下的命令完毕了android的下载。

  

cd  /media/ Itleaks /source/4.4
repo init –u /media/itleaks/git/repositories/platform/manifest.git
repo sync

       然后他仅仅需在根文件夹下建立一个manifest项目。而且复制文件.repo/manifest/default.xml并改动就可以将这个repo项目变为reposerver。


利用repo mirror建立自己的repo server


      事实上repo提供一个更加好的參数用来建立repo server,即repo –mirror. 比方你想要建立一个android的repo server,仅仅需运行例如以下命令就可以

repo init –u /media/itleaks/git/repositories/platform/manifest.git –mirror
repo sync

/********************************

* 本文来自博客  “爱踢门”

* 转载请标明出处:http://blog.csdn.net/itleaks

******************************************/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115342.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 整除的尾数_整除数

    整除的尾数_整除数整除的尾数时间限制:1000 ms | 内存限制:65535 KB难度:0描述一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?输入输入数据有若干组,每组数据包含二个整数a,b(0输出对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。样例输入

    2025年5月24日
    1
  • VS2008安装失败原因!「建议收藏」

    VS2008安装失败原因!「建议收藏」从RTM到现在,我已安装十多回VS2008,发现总会安装OfficeTools的时候,会失败。百思不知其解。后在网上看到,是因为我们使用UltraISO制作激活成功教程的VS2008的时候带出来的问题,主要是Unicode的问题。于是我这个怎么解决呢?我尝试先用deamon打开原版的vs2008,再用untraISO将虚拟盘的所以文件加入新的ISO中,再将激活成功教程的setup.那个文件,加入。重新生成iso

    2025年9月25日
    6
  • SpringMVC @ResponseBody 415错误处理

    SpringMVC @ResponseBody 415错误处理闲话少说,刚开始用SpringMVC,页面要使用jquery的ajax请求Controller。但总是失败,主要表现为以下两个异常为:异常一:java.lang.ClassNotFoundException:org.springframework.http.converter.json.MappingJacksonHttpMessageConverter异常二

    2022年6月10日
    31
  • spring cloud和dubbo的区别,各自优缺点「建议收藏」

    spring cloud和dubbo的区别,各自优缺点「建议收藏」区别:————————–来源(背景):Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点。SpringCloud,从命名我们就可以知道,它是SpringSource的产物,Spring社区的强大背书可以说是Java企业界最有影响力的组织了,除了SpringSource之外,还有Pivotal和Netfix是其强大的后盾与技术输…

    2022年6月12日
    34
  • php curl_init undefined,php运行出现Call to undefined function curl_init()的解决方法

    php curl_init undefined,php运行出现Call to undefined function curl_init()的解决方法在装好PHP后,执行类似$ch=curl_init();这样的语句,出现Calltoundefinedfunctioncurl_init()的错误提示。解决方法如下:1、在php.ini中找到extension=php_curl.dll,去掉前面的,php.ini一般在c:\windows下面。2、在php.ini中找到extension_dir=“ext”,去掉前面的;,改为ex…

    2022年7月13日
    12
  • 密宗经典是佛说的吗_华为微信语音加密怎么试听

    密宗经典是佛说的吗_华为微信语音加密怎么试听什么?佛经都能用来加密了?自上次的社会主义核心价值观加密之后,我已经见怪不怪了。题目:夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密離怯婆皤礙他哆提哆多缽以南哆心曰姪罰蒙呐神。舍切真怯勝呐得俱沙罰娑是怯遠得呐數罰輸哆遠薩得槃漫夢盧皤亦醯呐娑皤瑟輸諳尼摩罰薩冥大倒參夢侄阿心罰等奢大度地冥殿皤沙蘇輸奢恐豆侄得罰提哆伽諳沙楞缽三死怯摩大蘇者數一遮解析:这题是攻防世界中的一道题目,这一段文字是佛经,按..

    2025年8月14日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号