搭建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 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" ?>
|
将上面的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 |
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 关于android语言切换后通知栏显示的问题
- AndroidICS4.0---->LockScreen锁屏流程【Android源码解析九】
- Android(安卓)自定义View:TopBar
- Android开发常用代码
- Android(安卓)代码中动态为RadioGroup添加RadioButton
- Facebook发布React Native for Android
- Android本地代码直接访问远程数据库(Rxjava方式)
- ormlite数据库存放sd卡,android卸载应用保留数据的方法