这里写的是 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

更多相关文章

  1. 改善用户体验
  2. Android 判断用户2G/3G/4G移动数据网络
  3. Google称Android新漏洞对用户影响不大
  4. Android活跃用户总数达14亿人 平均每4个月增加1亿用户
  5. 为什么说android UI操作不是线程安全的 分类: Android 2014-09-23
  6. android 获取sd卡根目录
  7. android 文件目录权限
  8. Android开发系列教程——目录
  9. Android 图形用户界面 之 绘图(一)

随机推荐

  1. 跨平台移动开发 Android使用JPush推送消
  2. Android 4高级编程(第3版)》
  3. LinearLayout水平居中控制
  4. Android NDK学习教程(一)--第一个NDK程序
  5. android String XML使用
  6. Android获取屏幕尺寸大小
  7. java.lang.ClassCastException: com.goog
  8. Android 编译系统理解:envsetup.sh学习
  9. android软键盘把页面挤上去的解决方法
  10. Android中xml解析