从零搭建 repo 服务器

这里写的是 repo + git 服务器搭建。不是客户端
到新的公司上班。由于公司新做Android 方面开发。没人懂Android ,只好自己搭建Android 代码管理工具。基于 gitosis + repo 管理Android 代码。搭建这个环境浪费一个星期时间。这篇文章也参考很多其他人博客!再此感谢那些前者贡献。
由于 方案厂商给我们的Android 源码 不带 git ,就是 纯Android 源码。
我有两台 电脑 A用于代码服务器(192.168.100.182) B 客户端(192.168.100.181)
首先在 A端安装
sudo apt-get install git-core openssh-server openssh-client
安装git过程中可能会遇到一些依赖包下载失败的情况,主要是由于ubuntu的中文站点访问的问题,我们可以到其英文站点
上下载相关文件并进行手动安装。给大家一个链接地址:
http://archive.ubuntu.com/ubuntu/pool/main/
2,在A服务器端下载安装gitosis
随便 建立一个目录 例如:gitosis_setup

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

进入 gitosis 目录 安装 gitosis

cd gitosis
sudo python setup.py install

注意:如果python setup.py install失败,需要安装python-setuptools.py
sudo apt-get install python-setuptools.py

安装配置gitosis
初始化一下服务器的git用户,这一步其实是为了安装gitosis做准备。在任何一 台机器上使用git,第一次必须要初始化一下:
a@server:~$ git config –global user.name “myname”
a@server:~$ git config –global user.email “myname@server

上面的myname 我的写成 dsp ,myname@server 写成 dsp@pptv.com
就是公司邮箱地址,根据个人情况填。
为gitosis创建系统用户 (当前用户为wirror800)

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

这种方法是网上比较常见的方法,创建的是一个禁用密码的git用户
3,新建 gitosis 管理员
假如 A是服务器,B(192.168.100.181 ) 是我代码服务器管理电脑,最好不要 用A电脑的用户作为 管理员,我使用B电脑的dyna 用户 作为gitosis 管理员,
在 B 端 下使用命令 ssh-keygen -t rsa 生成 pub.key

ssh-keygen -t rsa

B客户端 生成在 /home/dyna/.ssh/id_rsa.pub 下面。
可以使用 scp /your pub_path/id_rsa.pub ${SERVER_IP}:id_rsa.pub 或者U盘拷贝 或者其他方法。
我把id_rsa.pub 拷贝到 A的 tmp目录下

cd  tmp
sudo chmod 777 id_rsa.pub
sudo -H -u git gitosis-init < id_rsa.pub

(或者切换到git用户下执行gitosis-init < id_rsa.pub也可以,记得exit切换回当前用户)
此时,会在/home/git目录下生成一些目录,如果想要别人能够clone gitosis-admin.git,需要执行以下操作:

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

在客户端 B
从服务器 克隆gitosis-admin.git
在 B端 dyna 目录 下 的 test目录中

git clone  git@192.168.100.182:gitosis-admin.git
cd  gitosis-admin

你将看到以下文件gitosis.conf和keydir/,gitosis.conf是gitosis的配置文件,用于配置用户和权限,keydir/是所有组成员的
公钥。
vi gitosis.conf, 打开gitosis.conf文件,内容为:

[gitosis]

[group gitosis-admin]
members = dyna@dyna-PowerEdge-R720
writable = gitosis-admin

[group gitosis-admin] 
members = dyna@dyna-PowerEdge-R720 
writable = gitosis-admin 

5, 在客户端 B
增加成员的公钥到系统中
比如我现在增加一个用户 allen 到gitosis 系统中,以后访问免密码
在 allen 命令 ssh-keygen -t rsa 生成key 过程中敲 enter 键,不要输入密码
把 allen 生成 id_rsa.pub 拷贝到B客户端gitosis-admin 下面 并命名为 allen.pub

cd ../gitosis-admin
cp allen.pub keydir/
git   add allen.pub

修改gitosis.conf文件最后面增加 下面 一段文字

[group apps]
writable = apps
members = dyna@dyna-PowerEdge-R720 allen

表示增加一个 仓库(名字为apps)
writable = apps 可读可写
可以被访问的成员有 allen 和 dyna@dyna-PowerEdge-R720

gitosis.conf 内容
[gitosis]
[group gitosis-admin]
members = dyna@dyna-PowerEdge-R720
writable = gitosis-admin

[group apps]
writable = apps
members = dyna@dyna-PowerEdge-R720 allen
然后把提交上传到服务器
git commit -a -m "Granted new members commit rights to apps"
git push
其他成员 可以通过下面命令获取代码
 git clone git@192.168.100.182:apps.git
至此 gitosis 服务器已经搭建好

可以参考下面的博客 http://blog.csdn.net/wirror800/article/details/5189564
搭建 Android repo 管理 服务器
若在服务器A端 已经存在 /home/git/repositories 目录 就不需创建 repositories
否则

sudo su  git
cd /home/git
mkdir repositories 
cd repositories 
git init --bare manifest.git

搭建 git-daemon 在搭建这个的时候我用的是git-daemon-sysvinit ,我用
git-daemon-run 一直出问题。不工作

sudo apt-get install git-daemon-sysvinit

3.配置文件
这个地方前面遇到了一些问题,,然后我又一步步的分析/etc/init.d/git-daemon脚本文件,最后才找到配置的方法.
配置文件在/etc/default/git-daemon
打开编辑
sudo vi /etc/default/git-daemon
我的配置文件内容如下(后面会具体参数的意义)
我使用的作为git仓库的目录为/home/git/repositories….你们就改成自己相同的就行了.

# Defaults for git-daemon initscript
# sourced by /etc/init.d/git-daemon
# installed at /etc/default/git-daemon by the maintainer scripts

#
# This is a POSIX shell fragment
#

GIT_DAEMON_ENABLE=true
GIT_DAEMON_USER=git
GIT_DAEMON_DIRECTORY=/home/git/repositories

# Additional options that are passed to the Daemon.
GIT_DAEMON_OPTIONS="--export-all --enable=upload-pack --enable=upload-archive --enable=receive-pack --informative-errors"  
GIT_DAEMON_BASE_PATH=/home/git/repositories 

可以参考这篇文章搭建
http://blog.csdn.net/fdl19881/article/details/8679469
其中
GIT_DAEMON_ENABLE=true很明显得设置成true值了
GIT_DAEMON_USER=git 这个就看你想用哪个用户运行git-daemon.一般为了安全都得设置别的用户...
注意!!设置的这个用户一定得对GIT_DAEMON_BASE_PATH有读,写,执行的所有权限!! 可以用ls -ld git仓库目录,查看为drwx
如果你的git仓库放在自己的个人目录下即/home/use_name下面的话,那设置成你的用户名准没错.
GIT_DAEMON_DIRECTORY=”/var/cache/git /home/git/repositories” 这个是设置成目录白名单whitelist!! 如果不设置的话用户在git操作时如git clone,git push等等会出现no such directory. 而在服务器机器上/var/log/syslog中会看到’/home/git/repositories/xxx.git’: not in whitelist
GIT_DAEMON_OPTIONS 就是设置参数了.如果想上传,且全部导出.就设置–export-all –enable=upload-pack –enable=upload-archive –enable=receive-pack
注意!如果出现找不到的话,就在/home/git/repositories目录下面的项目仓库目录下touch git-daemon-export-ok..生成一个这个名字的文件即可.
如果想使用git push功能,那一定要打开–enable=receive-pack
最后一个
GIT_DAEMON_BASE_PATH 即设置根目录.比如像我的这个设置.
那么你在用git clone git://your ip or name/test.git时,git服务器就会查换/home/git/repositories/test.git目录了.

以上设置好了只后,,那么每次开机就会自己启动了.
还可以使用sudo service git-daemon start|restart|stop控制. sudo /etc/init.d/git-daemon start|restart|stop也可以了.

然后在 B客户端

cd  /home/dyna/
git clone git@192.168.100.182:manifest.git
cd manifest

将 default.xml 拷贝到此目录下,这个文件是跟这个Android 源码 配套的。没有自己可以参考别人的创建一个

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

  <remote  name="ppbox"
           fetch=".."
           review="ssh://innrom.pptv.com/ppbox/mtk/" />
  <default revision="ppbox-mtk15"
           remote="ppbox"
           sync-j="1" />

  <project path="build" name="platform/build"  >
    <copyfile src="core/root.mk" dest="Makefile" />
  </project>
  <project path="abi/cpp" name="platform/abi/cpp"  />
  <project path="art" name="platform/art" />
  <project path="bionic" name="platform/bionic"  />
  <project path="bootable/bootloader/lk" name="platform/bootable/bootloader/lk" />
  <project path="bootable/diskinstaller" name="platform/bootable/diskinstaller" />
  <project path="bootable/recovery" name="platform/bootable/recovery"  />
  <project path="cts" name="platform/cts"  />
  <project path="dalvik" name="platform/dalvik" />
  <project path="developers/build" name="platform/developers/build" />
  <project path="developers/samples/android" name="platform/developers/samples/android" />
  <project path="development" name="platform/development" />
  <project path="device/asus/deb" name="device/asus/deb"  />
  <project path="device/asus/flo" name="device/asus/flo"  />
  <project path="device/asus/flo-kernel" name="device/asus/flo-kernel"  />
  <project path="device/asus/grouper" name="device/asus/grouper"  />

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

git  add  .
git commit -m"Init  Commit"
git push  或者  git push --all
在 A 服务端  /home/git/repositories  目录 中新建 Android 
project path 文件 仓库
我使用 cat default.xml | cut -d '"'   -f 2 > src.txt
或得到 需要 在A端新建的目录列表,然后使用 一个脚本

cat src.txt | ./src.sh
脚本内容

#/bin/bash
set -x
set -e
pwd=${PWD}

cd /home/git/repositories
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

此脚本会在 /home/git/repositories 目录下面建立相关的git 仓库

kernel.git    mediatek.git  
device          manifest.git  platform      vendor.git

在 B 客户端 在 目录
/home/dyna/or_android/ 存着不带任何 .git 或者.svn 的干净Android 源码
使用
cat default.xml | cut -d ‘”’ -f 4 > des.txt

 cat default.xml | cut -d '"'   -f 4
UTF-8
<manifest>
platform/build
Makefile
  </project>
platform/abi/cpp
platform/art
platform/bionic
platform/bootable/bootloader/lk
platform/bootable/diskinstaller
platform/bootable/recovery
platform/cts
platform/dalvik
platform/developers/build
platform/developers/samples/android
platform/development
device/asus/deb
device/asus/flo
device/asus/flo-kernel
device/asus/grouper
device/asus/tilapia
device/common
device/generic/armv7-a-neon
device/generic/common
device/generic/goldfish
device/generic/mips
device/generic/mini-emulator-armv7-a-neon
device/generic/mini-emulator-mips
device/generic/mini-emulator-x86
device/generic/x86
device/google/accessory/arduino
device/google/accessory/demokit
device/lge/hammerhead
device/lge/hammerhead-kernel
device/lge/mako

将上面的无关字符 删除
UTF-8

Makefile

得到一个 我们要上传到服务端路径的文本
使用下面 命令 cat des.txt | ./des.sh
des.sh 内容如下:

#/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.100.182/$line.git master
        elif [ "$line1" = "kernel" ]; then
            git push --set-upstream git://192.168.100.182/$line.git master
        elif [ "$line1" = "mediatek" ]; then
            git push --set-upstream git://192.168.100.182/$line.git master
        elif [ "$line1" = "vendor" ]; then
            git push --set-upstream git://192.168.100.182/$line.git master
        else
            git push --set-upstream git://192.168.100.182/platform/$line.git master
        fi
    cd -
done

这样就把 本地Android源码推送到 B端服务器端的仓库中了。
在 dyna目录下载 git-repo.git
git clone https://gerrit.googlesource.com/git-repo git-repo.git
如果上面的地址不行。自己就在网上搜一个可以下载的。
cd git-repo.git
修改 repo

##
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
REPO_REV = 'stable'
改为 
REPO_URL = /home/dyna/git-repo.git  指的是 repo 所调用库和管理引用仓库
REPO_REV = 'master'   仓库 git  branch  可以进入 git-repo.git  ; 命令  git  branch 查看 。我的是  master 分支

将 git-repo.git 目录下的 repo 拷贝到 /usr/bin
sudo cp repo /usr/bin
新建目录
mkdir /home/dyna/test 测试 Android
cd test
repo init -u git://192.168.100.182/manifest.git
repo sync
下面是参考博客

http://blog.csdn.net/seker_xinjian/article/details/6232475
http://blog.csdn.net/fdl19881/article/details/8679469
http://blog.csdn.net/ice520301/article/details/6142503

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九霄的爸爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值