https://blog.csdn.net/lb5761311/article/details/47723455
这里写的是 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
1
2
3
4
5
进入 gitosis 目录 安装 gitosis
cd gitosis
sudo python setup.py install
1
2
注意:如果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 “
1
2
3
4
5
上面的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
1
这种方法是网上比较常见的方法,创建的是一个禁用密码的git用户
3,新建 gitosis 管理员
假如 A是服务器,B(192.168.100.181 ) 是我代码服务器管理电脑,最好不要 用A电脑的用户作为 管理员,我使用B电脑的dyna 用户 作为gitosis 管理员,
在 B 端 下使用命令 ssh-keygen -t rsa 生成 pub.key
ssh-keygen -t rsa
1
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
1
2
3
(或者切换到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
1
在客户端 B
从服务器 克隆gitosis-admin.git
在 B端 dyna 目录 下 的 test目录中
git clone git@192.168.100.182:gitosis-admin.git
cd gitosis-admin
1
2
你将看到以下文件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
1
2
3
4
5
6
7
8
9
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
1
2
3
修改gitosis.conf文件最后面增加 下面 一段文字
[group apps]
writable = apps
members = dyna@dyna-PowerEdge-R720 allen
1
2
3
表示增加一个 仓库(名字为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
1
2
3
4
5
6
7
8
9
然后把提交上传到服务器
git commit -a -m "Granted new members commit rights to apps"
git push
其他成员 可以通过下面命令获取代码
git clone git@192.168.100.182:apps.git
至此 gitosis 服务器已经搭建好
1
2
3
4
5
6
可以参考下面的博客 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
1
2
3
4
5
搭建 git-daemon 在搭建这个的时候我用的是git-daemon-sysvinit ,我用
git-daemon-run 一直出问题。不工作
sudo apt-get install git-daemon-sysvinit
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
可以参考这篇文章搭建
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
1
2
3
将 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" />
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
将上面的default.xml 文件push 到仓库
git add .
git commit -m"Init Commit"
git push 或者 git push --all
1
2
3
在 A 服务端 /home/git/repositories 目录 中新建 Android
project path 文件 仓库
我使用 cat default.xml | cut -d '"' -f 2 > src.txt
或得到 需要 在A端新建的目录列表,然后使用 一个脚本
1
2
3
4
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
此脚本会在 /home/git/repositories 目录下面建立相关的git 仓库
kernel.git mediatek.git
device manifest.git platform vendor.git
1
2
3
在 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
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
将上面的无关字符 删除
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
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
37
38
39
40
这样就把 本地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 分支
1
2
3
4
5
6
将 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
---------------------
作者:九霄的爸爸
来源:CSDN
原文:https://blog.csdn.net/lb5761311/article/details/47723455
版权声明:本文为博主原创文章,转载请附上博文链接!