创建自己的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
******************************************/
创建自己的Repo Server的更多相关文章
- 创建Android本地repo
/**************************************************************************** * 创建Android本地repo * 说明 ...
- 批处理创建数据库(Sql Server)
ylbtech-Miscellaneos:批处理创建数据库(Sql Server) 1.A,资源(Resource) - 创建数据返回顶部 1.A.1,InstallDatabases.cmd - 编 ...
- 【转】Github轻松上手2-如何使用命令行创建和管理repo
转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzhd.html 如果你对这种怀旧的方式很感冒,不妨参考这里: http://help.github.co ...
- 创建和使用SQL Server SSAS本地多维数据集
Microsoft SQL Server SSAS的本地多维数据集(即Local Cube,也叫脱机多维数据集)和本地挖掘模型(Local Mining Models)允许在客户端机器上脱机执行离线分 ...
- 如何创建和还原SQL Server 2005数据库?
在还原SQL Server 2005数据库文件之前,建议先把要还原的数据库文件复制粘贴到某个盘的根目录下,这样便于一会儿找到相关的文件,比如C盘. 先打开SQL Server 2005的Microso ...
- 如何创建和还原SQL Server 2000数据库?
说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,虽然现如今SQL Server 2000软件早已经过时了,但仍然有一部分人在使用它,尤 ...
- 使用HANA Web-based Development Workbench创建最简单的Server Side JavaScript
服务器端的JavaScript, 看下wikipedia的介绍: https://en.wikipedia.org/wiki/JavaScript#Server-side_JavaScript Ser ...
- 自动创建数据库(DELPHI+SQL SERVER)
procedure TForm1.Btn_OKClick(Sender: TObject); var sqlconn:string; begin Sqlconn:='Provider=SQLOLEDB ...
- 【转】Github轻松上手3-使用Tower图形化界面工具创建和管理repo
转自:http://blog.sina.com.cn/s/blog_4b55f6860100zzib.html 除了在命令行中输入特定的命令,另外一种方式就是用第三方的可视化工具,比如Mac下的Tow ...
随机推荐
- 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理(转)
原文链接:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本 ...
- javaScript如何跳出多重循环break、continue
先来说说break和continue之间的区别 for(var i=0;i<10;i++){ if(i>5){ break; }}console.log(i); ---6 •当i ...
- swiper (Table切换和动态加载时候出现的问题)
本文为让心灵-去旅行原创,转载请说明.. 我们在写一个简单的swiper图片轮播的时候很简单,是写死的也就那么几张图片轮播.如果这时候图片和一些东西是后台的,你从js里动态添加到DOM时,这时候你就会 ...
- js + -操作符
js + 举例说明最有效了... "11"+1='111' "11"+'1'="111" 11+1=12 大概的感觉就是+操作符会优先输入S ...
- poj2956 Repeatless Numbers(枚举|BFS)
题目链接 http://poj.org/problem?id=2956 题意 如果一个数中的每一位都是不同的,那么这个数叫做无重复数,如11是有重复数,12是无重复数.输入正整数n(1<=n&l ...
- Java 深入浅出String
String String是一个被final修饰的类,直接继承于Object,同时也实现了charsequence接口,String被声明为final也就不可以被继承了.由于String的方法比较多, ...
- 洛谷P1726 上白泽慧音 [Tarjan]
题目传送门 上白泽慧音 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村 ...
- 洛谷P3919 【模板】可持久化数组 [主席树]
题目传送门 可持久化数组 题目描述 如题,你需要维护这样的一个长度为 $N$ 的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对 ...
- Xamarin.Forms教程开发的Xcode的下载安装
Xamarin.Forms教程开发的Xcode的下载安装 Xamarin.Forms教程开发的Xcode的下载安装,Xcode是开发iOS应用程序的图形化开发工具.本节将讲解Xamarin.Forms ...
- 【BZOJ 3996】 3996: [TJOI2015]线性代数 (最小割)
3996: [TJOI2015]线性代数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1368 Solved: 832 Description 给 ...