(一): 配置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" ?>      "origin"             fetch= "git://192.168.1.126" />    < default revision= "master"             remote= "origin"             sync-j= "4" />      "build" name= "platform/build" groups= "pdk" >      "core/root.mk" dest= "Makefile" />       "abi/cpp" name= "platform/abi/cpp" groups= "pdk" />      ... ...  

将上面的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

更多相关文章

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

随机推荐

  1. 关于cocos2dx的eclipse的"serializing cd
  2. 实现简单的Android的播放视频功能
  3. Android 在屏幕上打印LOG
  4. [转]Android Audio简述
  5. js 判断当前操作系统 ios, android, 电脑
  6. 对话框式activity
  7. 在Android中支持表情
  8. android 竖屏activity跳转横屏activity返
  9. Android ListView在TalkBack下有些项无法
  10. 探讨相对布局的重要特性和属性