搭建Android repo服务

(一): 配置gitosis

1. 说明

服务器端IP: 192.168.1.126,下文简称:A端;

客户端IP: 192.168.130.19,下文简称:B端;

Android工程代号:17435。

 

2. 安装必要软件(A端)

sudo apt-get install git-core openssh-server openssh-client

 

3. 安装配置gitosis

3.1 下载gitosis(A端)

1
2
3
mkdir ~/gitosis_setup
cd ~/ gitosis_setup
git clone git: //eagain.net/gitosis
如果失败 用下面的地址:
1
git clone https: //github.com/res0nat0r/gitosis.git

3.2 安装 gitosis(A端)

1
2
cd gitosis
sudo python setup.py install

如果python setup.py install失败,需要安装python-setuptools:

1
sudo apt- get install python-setuptools

3.3 为gitosis创建系统用户(A端)

创建一个禁用密码的用户git:

1
sudo adduser --system --shell /bin/sh --gecos 'git SCM user' -- group --disabled-password --home /home/git  git

3.4 新建并配置gitosis管理员(B端)

最好不要用A电脑的用户作为管理员,本文使用B端的gitadmin用户作为gitosis管理员。

a)生成 pub.key(B端)
1
ssh-keygen-t rsa

生成在 /home/gitadmin/.ssh/id_rsa.pub下面,把id_rsa.pub拷贝到A端的tmp目录下:

1
scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa_gitadmin.pub

b)执行gitosis-init(A端)

1
2
3
cd /tmp
sudo chmod 777 id_rsa_gitadmin.pub
sudo -H -u git gitosis-init < id_rsa_gitadmin.pub

此时,会在/home/git目录下生成一些目录,如果其他用户需要clone gitosis-admin.git的权限,需要执行以下操作:

1
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

c) 从A端克隆gitosis-admin.git(B端)

1
2
3
4
mkdir -p share/gittest/
cd share/gittest/
git clone [email protected]:gitosis-admin.git
cd gitosis-admin/

其中,gitosis.conf是gitosis的配置文件,用于配置用户和权限,keydir/是所有组成员的公钥。

查看gitosis.conf文件,内容如下:

1
2
3
4
[gitosis]
[ group gitosis-admin]
members = gitadmin@ubuntu
writable = gitosis-admin



(二): 配置git-daemon-run

git-daemon-run实际是一个脚本管理工具,用来启动git-daemon.

1 安装git-daemon-run(A端)

1
apt- get install git-daemon-run

2. 配置git-daemon-run(A端)

1
vi /etc/sv/git-daemon/run

可以看到:

1
2
3
4
5
6
#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
   "$(git --exec-path)" /git-daemon --verbose --reuseaddr \
     -- base -path=/ var /lib / var /lib/git

将最后一行修改为:

1
--export-all --enable=receive-pack -- base -path=/home/git/repositories/

参数说明:

a) --export-all

使用该选项后,在git仓库中就不必创建git-daemon-export-ok文件。如果不使用该选项,则还需要创建该文件,即

1
touch git-daemon-export-ok

b) --enable=receive-pack

 

3. 重启git deamon(A端)

1
2
sudo sv stop git-daemon
sudo sv start git-daemon

或者:

1
sudo sv restart git-daemon



(三): 搭建Android repo服务器

1. 配置repo

1.1  下载git-repo.git(B端)

1
2
3
mkdir -p ~/gitCfg
cd ~/gitCfg
git clone https: //gerrit.googlesource.com/git-repo git-repo.git

如果上面的地址无法连接,可以尝试下面的地址:

1
git clone https: //review.mfunz.com/git-repo git-repo.git

1.2 配置repo(B端)

a) 将git-repo.git目录下的repo拷贝到 /usr/bin:

1
2
cd git-repo.git
sudo cp repo /usr/bin/repo_gitadmin

b) 修改 repo

1
vi /usr/bin/repo_gitadmin

修改

1
2
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
REPO_REV = 'stable'

1
2
REPO_URL = /home/gitadmin/gitCfg/git-repo.git
REPO_REV = 'master'

其中,

REPO_URL: repo 所调用库和管理引用仓库;

REPO_REV: 本文设置分支为master,可用命令git branch查看:

1
git branch -avv 

 

2. 创建版本根目录(A端)

2.1 如果已经存在 /home/git/repositories 目录,就不需要创建,否则:

1
2
3
sudo su git
cd /home/git
mkdir repositories

2.2 初始化manifest仓库

1
2
cd repositories
git init --bare 17435/manifest.git

 

3. 配置default.xml文件(B端)
default.xml是跟Android代码配套的,可参考google Android源码下的default.xml(.repo/manifests/default.xml)进行修改。

3.1 克隆manifest.git

1
2
3
mkdir /home/gitadmin/17435
cd  /home/gitadmin/17435
git clone [email protected]:17435/manifest.git

3.2 配置default.xml

1
2
cd manifest
vi default .xml

本文的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"1.0" encoding= "UTF-8" ?>
 
   "origin"
            fetch= "git://192.168.1.126" />
   < default revision= "master"
            remote= "origin"
            sync-j= "4" />
 
   "build" name= "platform/build" groups= "pdk" >
     "core/root.mk" dest= "Makefile" />
  
   "abi/cpp" name= "platform/abi/cpp" groups= "pdk" />
 
   ... ...
 

将上面的default.xml 文件push 到仓库:

1
2
3
git add .
git commit -m "Init  Commit"
git push 或者 git push --all

 

4. 建立相关的git 仓库(A端)

4.1 获取需要新建的仓库目录列表

1
2
cd /home/git/repositories/17435
cat default .xml | cut -d '"' -f 4 > repos_17435.txt

在repos_17435.txt中删除不必要的行,如manifest, Makefile等。

4.2 新建脚本repos_17435.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#/bin/bash
set -x
set -e
pwd=${PWD}
 
cd /home/git/repositories/17435
while read line; do
     if [ -z "$line" ]; then
         echo $work_dir not exist !!!!!!!!!! 1>&2
         continue
     fi
         git init --bare $line.git
         echo ==== $line
         pwd
done

4.3 使用如下命令新建仓库

1
cat repos_17435.txt | . repos_17435.sh

4.4 修改仓库的文件属性

1
sudo chmod 777 -R /home/git/repositories/17435

 

5. 上传代码到仓库(B端)

5.1 拷贝Android代码到目录,

1
/home/gitadmin/17435/src

并清除其中git和svn等版本控制信息。

5.2 通过default.xml得到需要上传的仓库目录,并保存在src_17435.txt中

1
2
cd /home/gitadmin/17435/src
cat /home/gitadmin/17435/manifest/ default .xml | cut -d '"' -f 2 > src_17435.txt

编辑src_17435.txt,清除不必要的行。

5.3 新建脚本src_17435.sh如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#/bin/bash
 
set -x
set -e
 
para1=
work_dir=$1
 
pwd=${PWD}
 
while read line; do
     line1=${line%%/*}
     if [ -z "$line" ]; then
         echo $work_dir not exist !!!!!!!!!!!! 1>&2
         continue
     fi
     if [ $(ls -A $pwd/$line | wc -l) -eq 0 ]; then
         echo $work_dir empty !!!!!!!!!!!! 1>&2
         continue
     fi
     workdir=$pwd/$line
     echo ==== $workdir
     cd $workdir
         rm -rf .git
         git init .  1>&2
         git add . -f 1>&2
         git commit -m "Initial commit" 1>&2
         if [ "$line1" = "device" ]; then
             git push -- set -upstream git: //192.168.1.126/17435/$line.git master
         elif [ "$line1" = "vendor" ]; then
             git push -- set -upstream git: //192.168.1.126/17435/$line.git master
         else
             git push -- set -upstream git: //192.168.1.126/17435/platform/$line.git master
         fi
     cd -
done

5.4 使用如下命令上传代码到仓库:

1
cat src_17435.txt | . src_17435.sh

 

6. 下载代码

1
2
3
4
mkdir - p / home / gitadmin / 17435 / des
cd / home / gitadmin / 17435 / des
repo_gitadmin init - u git: / / 192.168 . 1.126 / 17435 / manifest.git
repo_gitadmin sync - f - j4

你可能感兴趣的:(搭建Android repo服务)