用repo+gitolite管理自己的代码

安装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

然后想用repo需要一个manifest.git来管理项目

里面放一个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

这样提交上去新的代码

你可能感兴趣的:(用repo+gitolite管理自己的代码)