创建自己的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的内容:

[email protected]:/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

[email protected]:/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

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

时间: 2024-10-26 03:21:13

创建自己的Repo Server的相关文章

创建Android本地repo

/**************************************************************************** * 创建Android本地repo * 说明: * 可能我们自己讲Android源代码同步下来了,但是我们自己修改的源代码并不能 * 直接推送到google服务器上去,所以需要创建本地的repo服务器. * * 2016-9-7 深圳 南山平山村 曾剑锋 ********************************************

目录: 第3章 创建新的 SQL Server实例

第3章  创建新的 SQL Server实例 3.1  使用安装向导 3.2  从命令行安装 3.3  在服务器核心中安装

批处理创建数据库(Sql Server)

ylbtech-Miscellaneos:批处理创建数据库(Sql Server) 1.A,资源(Resource) - 创建数据返回顶部 1.A.1,InstallDatabases.cmd - 编程代码 @Echo Off cls REM *************************************************************************** REM ** REM ** Name: InstallDatabases REM ** Desc: SQ

Linux下创建本地yum源Server

在安装CM的时候需要联网进行下载安装文件,如果我们能够搭建本地的yum源就可以不用联网下载rpm包,也不用往其他节点上手工安装rpm文件,会比较省事,本文主要介绍在Centos7下安装yum源. 1.安装软件 操作系统版本:CentOS 7.4 检查是否安装了createrepo: [root@node2 ~]# rpm -qa|grep createrepocreaterepo-0.9.9-28.el7.noarch 如果没有安装需要使用yum安装: [root@node2 ~]# yum i

创建与管理Hyper-V Server虚拟机

一. 使用向导创建Hyper-V虚拟机 1. 打开Hyper-V主机,点击服务器管理器,点击Hyper-V,右键Hyper-V主机选择并打开Hyper-V管理器 2. 在Hyper-V管理器右侧Hyper-V服务器,选择新建,选择虚拟机 3. 打开新建虚拟机向导后点击下一步 4. 指定名称和位置处,确定虚拟机名称以及存储放置 5. 选择Hyper-V虚拟机代数.第二代是Windows Server 2012 R2新增加的功能,Hyper-V使用更少的硬件以支持多项功能,例如使用标准网络适配器进行

自动创建数据库(DELPHI+SQL SERVER)

procedure TForm1.Btn_OKClick(Sender: TObject); var sqlconn:string; begin Sqlconn:='Provider=SQLOLEDB.1;'+'password='+Edit_Password.Text +';Persist Security Info=true;User ID='+Edit_Name.Text +';Data Source='+Edit_Server.Text; if Edit_Server.Text=Empt

使用同步socket创建非阻塞socket server

这个socket server可以: 非阻塞的处理多个socket连接. 可以接收来自客户端的ping消息,并把5秒内无活动的客户端移除. 可以接收客户端的login请求,使用者可以按自己需求加入认证逻辑. /*''' Non-Blocking socket server using blocking API Created on Dec 25, 2014 (merry christmas) @author: ScottGu<[email protected], [email protected

使用sql语句创建修改SQL Server标识列(即自动增长列)

一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3.列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列.由于以上特点,使得标识列在数据库的设计中得到广泛的使用.二.标识列的组成创建一个标识列,通常要指定三个内容:1.类型(type)在SQL Server 2000中,标识列类型必须是数值类型,如下:decima

在Windows Server 2012 R2的Hyper-V中创建支持RemoteFX的虚拟机

在Windows Server 2012 R2的Hyper-V中创建支持RemoteFX的虚拟机 今天一个网友问在Hyper-V创建中,支持3D的内容.有一段时间不用Hyper-V了,今天在家里的PC机上,安装测试一下. 1.在Windows 10计算机安装Windows 2012 R2 我当前的计算机是Windows 10,有1个128GB的M.2的SSD(图中标号为1的),1个3TB的硬盘作数据磁盘,前几天为了装Windows  7,又添加了一个2TB的硬盘,之后在这个2TB的硬盘上创建了3