(一): 配置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管理员。
1
|
ssh-keygen-t rsa
|
生成在 /home/gitadmin/.ssh/id_rsa.pub下面,把id_rsa.pub拷贝到A端的tmp目录下:
1
|
scp ~/.ssh/id_rsa.pub jasonlee@192.168.1.126:/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 git@192.168.1.126: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 git@192.168.1.126: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
|
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<manifest>
<remote name=
"origin"
fetch=
"git://192.168.1.126"
/>
<
default
revision=
"master"
remote=
"origin"
sync-j=
"4"
/>
<project path=
"build"
name=
"platform/build"
groups=
"pdk"
>
<copyfile src=
"core/root.mk"
dest=
"Makefile"
/>
</project>
<project path=
"abi/cpp"
name=
"platform/abi/cpp"
groups=
"pdk"
/>
... ...
</manifest>
|
将上面的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
|