安装gitolite并且下载repo
repo应该放在/usr/local/bin下面,我用的ubuntu的系统
然后用gitolite-admin.git来进行管理
conf下面是权限管理文件,keydir下面是各种密钥
ssh的密钥通过sshkey-gen来生成,使用xxx.pub的公钥
单独建立一个git的用户,可以配置成没有shell的,不能直接登录,每次使用sudo su - git来切换用户
然后在里面就可以建立仓库了,xxx.git,各种.git仓库
然后对每个仓库都要进行初始化git --bare init
用下面的脚本来初始化下
#/bin/bash #$0为当前运行的程序名称 #$1为传入的第一个参数 #第一个参数为目录名,将要遍历其下的所有目录 #echo "\$1:" $1 function scandir() { local cur_dir parent_dir workdir workdir=$1 cd ${workdir} if [ ${workdir} = "/" ] then cur_dir="" else cur_dir=$(pwd) fi for dirlist in $(ls ${cur_dir}) do #echo ${dirlist} fileCount=$(ls ${dirlist} | wc -l) if [ ${fileCount} -gt "0" ] then #这个目录已经被初始化过了 cd ${dirlist} cd .. else #这个目录是空的 cd ${dirlist} git --bare init cd .. fi done } if test -d $1 then scandir $1 elif test -f $1 then echo "you input a file but not a directory,pls reinput and try again" exit 1 else echo "the Directory isn't exist which you input,pls input a new one!!" exit 1 fi
里面放一个default.xml的文件
<?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="xxx" fetch=".."/> <default revision="xxx" remote="xxx"/> <project path="xxx" name="xxx/xxx"/> </manifest>path指的是下载之后存放的路径,name指的是在服务器上的代码仓库的路径
在用repo下载的时候用下面的命令
#! /bin/bash function download_gits() { repo init -u git@localhost:/androidMSTAR/manifest.git -b master #repo init -u [email protected]:/androidMSTAR/manifest.git -b master repo sync repo forall -c git checkout -b master }先下载manifest,然后再下载manifest里面描述的各个仓库
下载完了之后用repo forall来对所有的库统一进行分支切换的操作
基本流程就是这样子,我认为脚本还可以继续优化,功能更加强大
====2013-05-22更新====
如果更改了代码,比如新加入了目录
则要进行更改几个地方
首先在git端mkdir新的xxx.git 然后 git --bare init初始化
然后在manifest中添加对应的条目
在gitolite-admin中的conf文件中添加这个库的名字以及对应的权限
然后找个地方git clone下来空目录
拷贝文件进去
git add . / git commit -asm 'xxx' / git push
这样提交上去新的代码