创建自己的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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL删除表数据 MySQL清空表命令 3种方法

    MySQL删除表数据 MySQL清空表命令 3种方法一、MySQL清空表数据命令:truncateSQL语法:truncatetable表名注意:不能与where一起使用。 truncate删除数据后是不可以rollback的。 truncate删除数据后会重置Identity(标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的ID数。 truncate删除数据后不写服务器log,整体删除速度快。 truncate删除数据后不激活trigger(触发器)。二、MySQL删除表命令:

    2022年6月4日
    69
  • HOG(方向梯度直方图)

    HOG(方向梯度直方图)

    2021年12月9日
    102
  • Tomcat服务器下载、安装、配置环境变量教程(超详细)

    Tomcat服务器下载、安装、配置环境变量教程(超详细)未经我的允许,请不要转载我的文章,在此郑重声明!!!请先配置安装好Java的环境,若没有安装,请参照我博客上的步骤进行安装!安装Java环境教程https://blog.csdn.net/qq_40881680/article/details/83585542Tomcat部署Web项目(一)·内嵌https://blog.csdn.net/qq_40881680/article/d…

    2022年4月27日
    93
  • 手机扫码登陆原理(扫码充电线原理)

    问题描述 qq,淘宝等应用在pc端app或网页版都有扫码登陆功能(下述统称为网页端)。用户无需输入用户名和密码,通过在手机端app登陆后,扫网页中的二维码即可直接登陆。 原理分析:网页端+服务器 用户在浏览器点击“二维码登陆”向服务器发送扫码登陆请求,服务器收到请求后,随机生成一个uuid(通用唯一标识符:universallyuniqueidentifier),将这个i…

    2022年4月18日
    69
  • Spring AOP原理「建议收藏」

    Spring AOP原理「建议收藏」Spring AOP原理

    2022年4月25日
    44
  • mysql 外键(foreign key)的详解和实例「建议收藏」

    mysql 外键(foreign key)的详解和实例「建议收藏」一、基本概念1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。3、如果需要更好的…

    2022年6月15日
    25

发表回复

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

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