从零搭建 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_setupcd ~/ gitosis_setupgit clone git://eagain.net/gitosis如果失败 用下面的地git clone https://github.com/res0nat0r/gitosis.git
进入 gitosis 目录 安装 gitosis
cd gitosissudo 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 tmpsudo chmod 777 id_rsa.pubsudo -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.gitcd gitosis-admin
你将看到以下文件gitosis.conf和keydir/,gitosis.conf是gitosis的配置文件,用于配置用户和权限,keydir/是所有组成员的
公钥。
vi gitosis.conf, 打开gitosis.conf文件,内容为:
[gitosis][group gitosis-admin]members = dyna@dyna-PowerEdge-R720writable = 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-admincp allen.pub keydir/git add allen.pub
修改gitosis.conf文件最后面增加 下面 一段文字
[group apps]writable = appsmembers = dyna@dyna-PowerEdge-R720 allen
表示增加一个 仓库(名字为apps)
writable = apps 可读可写
可以被访问的成员有 allen 和 dyna@dyna-PowerEdge-R720
gitosis.conf 内容[gitosis][group gitosis-admin]members = dyna@dyna-PowerEdge-R720writable = gitosis-admin[group apps]writable = appsmembers = 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 gitcd /home/gitmkdir 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=trueGIT_DAEMON_USER=gitGIT_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.gitcd 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/bashset -xset -epwd=${PWD}cd /home/git/repositorieswhile read line; do if [ -z "$line" ]; then echo $work_dir not exist !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1>&2 continue fi git init --bare $line.git echo ==== $line pwddone
此脚本会在 /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 4UTF-8<manifest>platform/buildMakefile </project>platform/abi/cppplatform/artplatform/bionicplatform/bootable/bootloader/lkplatform/bootable/diskinstallerplatform/bootable/recoveryplatform/ctsplatform/dalvikplatform/developers/buildplatform/developers/samples/androidplatform/developmentdevice/asus/debdevice/asus/flodevice/asus/flo-kerneldevice/asus/grouperdevice/asus/tilapiadevice/commondevice/generic/armv7-a-neondevice/generic/commondevice/generic/goldfishdevice/generic/mipsdevice/generic/mini-emulator-armv7-a-neondevice/generic/mini-emulator-mipsdevice/generic/mini-emulator-x86device/generic/x86device/google/accessory/arduinodevice/google/accessory/demokitdevice/lge/hammerheaddevice/lge/hammerhead-kerneldevice/lge/mako
将上面的无关字符 删除
UTF-8
Makefile
得到一个 我们要上传到服务端路径的文本
使用下面 命令 cat des.txt | ./des.sh
des.sh 内容如下:
#/bin/bashset -xset -epara1=work_dir=$1pwd=${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
更多相关文章
- 改善用户体验
- Android 判断用户2G/3G/4G移动数据网络
- Google称Android新漏洞对用户影响不大
- Android活跃用户总数达14亿人 平均每4个月增加1亿用户
- 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23
- android 获取sd卡根目录
- android 文件目录权限
- Android开发系列教程——目录
- Android 图形用户界面 之 绘图(一)