搭建Repo服务器

来源:互联网 发布:淘宝店铺首页大图图片 编辑:程序博客网 时间:2024/05/16 10:18

         Repo是一个工具,可以有效的管理Android底下的几百个git工程。Repo并不是一个程序,而是一个脚本工程,git才是真正的版本管理工具。说到底,Repo就是一堆批处理,它把git的命令进行了合理封装,目标就是同时管理多个git工程。以下就是搭建Repo服务器端的步骤。

Step1. 搭建一个Git服务器(IP:10.203.138.81)

         见另一篇博文, Ubuntu上搭建Git服务器。

Step2. 在用户”david”权限下,新建并初始化一个manifest.git仓库 

         $ mkdir RepoServer(如,当前目录为/home/david

         $ cd RepoServer

         $ git init --bare manifest.git

         $ git init --bare bootable.git

         $ git init --bare cpp.git

         $ git init --bare device.git

Step3. 安装git-daemon

         $ sudo apt-get install git-daemon-run

         $ sudo gedit /etc/sv/git-daemon/run

         做如下修改:

         exec“(git –exec-path)”/git-daemon --verbose --reuseaddr --enable=receive-pack --enable=upload-pack --enable=upload-archive --export-all --base-path=/home/david

         重启git-daemon,使修改生效。

         $ sudo sv restart git-daemon

Step4. 定制manifest.git

         登陆一个库户机,克隆manifest.git仓库。

         $ cd C:\Users\XXX\git81

         $ mkdir MyRepo

         $ cd MyRepo

         $ git clone david@10.203.138.81:/home/david/RepoServer/manifest.git

         (会要求输入用户david在10.203.138.81上的密码)

         $ cd manifest

         在manifest仓库下创建一个default.xml文件。

         <?xml version="1.0"encoding="UTF-8"?>

         <manifest>

                  <remotename="origin"  fetch="git://10.203.138.81/RepoServer"/>

                  <defaultrevision="master" remote="origin" />

                  <projectpath="bootable" name="bootable" />

                  <projectpath="cpp" name="cpp" />

                  <projectpath="device" name="device" />

         </manifest>

         提交我们的更改.

         $ git add --all

         $ git commit  -m“add default.xml”

         $ git push origin master(可能会出push失败的情况,可以尝试git push –-all或者git push david@10.203.138.81:/home/david/RepoServer/manifest.git master

Step5. 定制源码仓库bootable.git/cpp.git/device.git

         登陆客户机,分别克隆源码仓库(此时是空仓库)。

         $ git clone david@10.203138.81:/home/david/RepoServer/bootable.git

         $ git clone david@10.203138.81:/home/david/RepoServer/cpp.git

         $ git clone david@10.203138.81:/home/david/RepoServer/device.git

         在相应的源码仓库中加入源码文件,提交并上传。

         $ cd bootable

         $ echo “hello Project” > hello.txt

         $ git add --all / git add . (注意这里有个点'.',表示添加当前目录所有文件)

         $ git commit  –m “add hello.txt”

         $ git push origin master

         (其他仓库做类似处理)

Step6. 定制一个服务器段的Repo仓库

         在repo脚本中有个REPO_URL,它指向服务器端repo仓库的URL。在这里我们定制自己的Repo仓库。我们可以下载一个repo工具 (https://github.com/android/tools_repo 或 http://pan.baidu.com/s/1gXeRs) ,这里我们下载的是tools_repo-master.zip,解压并改名到服务器段的某个目录(/home/david/RepoServer)。

         $ cd /home/david/RepoServer

         $ unzip tools_repo-master.zip

         $ mv tools_repo-master repo

         将repo置于版本管理下:

         $ cd repo

         $ git init

         $ git add --all

         $ git commit  –m “initial”

Step7. 测试Repo服务器

         在一个Ubuntu客户机上进行测试。

         $ cd ~

         $ mkdir bin

         $ curl http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo > ~/bin/repo

         (repo脚本可自行下载)

         $ chmod a+x ~/bin/repo

         $ export PATH=~/bin:$PATH

         $ mkdir MyProject

         $ cd MyProject

         $ repo init  --repo-url=git://10.203.138.81/RepoServer/repo  --no-repo-verify --repo-branch=master –u git://10.203.138.81/RepoServer/manifest.git

         (--repo-branch根据具体情况而定,一般为default或master)

         $ repo sync

 

备注: 

curl其实是一个下载工具,下面这个命令其实就是把网络上一个文件下载到了本地bin目录下。
curl http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo >  ~/bin/repo

我们通过chmod a+x ~/bin/repo 使得repo文件可以执行。

这个文件其实很关键,它相当于启动Repo的启动器。但是,很多初学者都进入了一个误区,认为repo文件就是Repo的全部。其实这是不对的,当执行下面这个命令时:repo其实做了很多很多的事情.....

repo init -u git://10.203.138.81/RepoServer/manifest.git

1、首先它创建一个.repo的文件夹,这个文件夹是隐藏的。接下来Repo所做的事情都是在.repo这个文件夹底下进行的。

2、它从网上下载一个repo.git的工程,这个工程才是整整的Repo的全部,也就是我们前面说过的"git命令脚本工程",它是使用python语言写的。

3、最后它把"-u git://10.203.138.81/RepoServer/manifest.git"传递给了repo工程。manifest.git工程中其实只有一个文件:default.xml,这个文件记录了一个工程列表。

当我们执行repo sync时,Repo通过解析default.xml这个文件,循环遍历下载所有的工程,从而达到统一管理的目的。

 

参考:

1、《Git权威指南》

2、《版本控制之道:使用Git》

3、《Git Community Book》

4、《Pro Git》

0 0
原创粉丝点击