转载自:
http://blog.csdn.net/u011479494/article/details/50629669
相比gitosis,gitolite的功能更为强大,支持对权限的细分控制,下面在最新版 的ubuntu 14.04 LTS中搭建gitolite服务器。
一、安装准备
1.服务器安装openssh
sudo apt-get -y install openssh-server openssh-client
2.在一台管理客户机上生成ssh公钥【客户机执行】
ssh-keygen -t rsa
生成的公钥在/home/xia/.ssh/里面,默认名字是id_rsa.pub。
3.安装git,在这个核心软件,不可或缺。
sudo apt-get -y install git
二、安装gitolite
在ubuntu中已经集成了,不用自己去下载。
sudo apt-get -y install gitolite
三、配置gitolite
1.创建用户gitolite【服务器执行】
添加gitolite用户和同名用户组,加上–system参数,用户就不会在登陆界面显示。
-- -- -- --- --
2.把管理客户机生成的公钥上传到服务器上【客户机执行】
scp ~/.ssh/id_rsa.pub berry@192.168.100.249:/tmp
3.初始化配置【服务器执行】
切换到gitolite用户环境中,因为我要以gitolite用户身份去初始化安装。
sudo chmod 777 /tmp/id_rsa.pub
mv /tmp/id_rsa.pub /tmp/xia.pub
sudo su - gitolite
gl-setup /tmp/xia.pub
以上命令有两个个作用:
a)建立一个目录“~/repositories”,用来存储所有git仓库;
b)把公钥文件id_rsa.pub添加到 ~/.ssh/authorized_keys。
4.修改配置文件
gitolite的配置文件本身就是一个git仓库,gitolite的配置修改就是通过git实现的,先clone下来修改,再push上去。只要push上去,gitolite会立刻监视到配置文件的修改并应用。
在管理客户端clone管理库到本地:
git clone gitolite@192.168.100.249:gitolite-admin.git
或者
git clone ssh://gitolite@192.168.100.249/gitolite-admin.git
clone下来以后,库里有一个文件夹conf,里面存储的是gitolite.conf(配置文件);还有一个文件夹keydir,里面存储的是用户的公钥文件,当前里面就有在管理客户端上生成的私钥(格式是”用户名.pub”,例如“xia.pub”)。
四、添加用户和仓库
添加新仓库也非常简单,假设你要添加一个叫lv@example.com的用户,再创建一个仓库叫testing,并赋给lv修改权限。
【在lv私钥计算机上操作】
1.首先ssh-keygen生成lv的公钥和私钥;
【在xia私钥计算机上操作】
2.把lv公钥(lv.pub)拷贝到本地gitolite-admin库的keydir里面;
3.编辑本地gitolite-admin库里的conf下的gitolite.conf,添加:
repo gitolite-admin
RW+ = xia
repo testing
RW+ = @all
+
+repo test
+ RW+ = lv
4.commit修改,push到服务器生效。服务端自动创建空的test.git工程仓库。
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 356 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: creating test...
remote: Initialized empty Git repository in /home/gitolite/repositories/test.git/
To ssh://gitolite@192.168.100.249/gitolite-admin.git
b5e8b3d..be1d3f1 master -> master
5.初始化仓库并push到服务器
【在lv私钥计算机上操作】
git clone ssh://gitolite@192.168.100.249/test.git
或者:git clone gitolite@192.168.100.249:test.git
cd test
echo "init commit" > readme.txt
git add .
git commit -m "init commit"
git push origin master
6.添加一个存在的Git项目
如果你有一个已经存在的项目,也想将其添加到Gitolite的服务器里。首先你依然需要在gitolite.conf里注册这个项目。然后执行下面的操作:
cd test
git remote rm origin
git remote add origin gitolite@192.168.100.249:test.git
git push origin master
如果你有多个branch,那么checkout到那个branch,执行
git push origin <branch-name>
五、搭建 Android repo 管理 服务器
1.搭建 git-daemon
(1)安装git-daemon-sysvinit
sudo apt-get install git-daemon-sysvinit
(2)配置 /etc/default/git-daemon
sudo vi /etc/default/git-daemon
# 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=true
GIT_DAEMON_USER=gitolite
GIT_DAEMON_BASE_PATH=/home/gitolite/repositories
GIT_DAEMON_DIRECTORY=/home/gitolite/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"
配置分析:
1)GIT_DAEMON_ENABLE=true 很明显得设置成true值了 。
2)GIT_DAEMON_USER=gitolite 表示使用哪个用户运行git-daemon。
注意:设置的这个用户一定得对GIT_DAEMON_BASE_PATH有读,写,执行的所有权限!
3)GIT_DAEMON_BASE_PATH=/home/gitolite/repositories 设置根目录。
比如像我的这个设置,那么你在用git clone gitolite://192.168.100.249/test.git时,git服务器就会查找/home/gitolite/repositories/test.git目录了。
4)GIT_DAEMON_DIRECTORY=/home/gitolite/repositories 这个是设置成目录白名单whitelist。
如果不设置的话用户在git操作时如git clone,git push等等会出现no such directory。而在服务器机器上/var/log/syslog中会看到’/home/gitolite/repositories/xxx.git’: not in whitelist 。
5)GIT_DAEMON_OPTIONS=”–export-all –enable=upload-pack –enable=upload-archive –enable=receive-pack –informative-errors” 设置参数。
如果想上传,且全部导出,就设置–export-all –enable=upload-pack –enable=upload-archive –enable=receive-pack 。
注意:如果出现找不到的话,就在/home/gitolite/repositories目录下面的项目仓库目录下touch git-daemon-export-ok,生成一个这个名字的文件即可。
如果想使用git push功能,那一定要打开–enable=receive-pack 。
以上设置好了只后,,那么每次开机就会自己启动了。
还可以使用sudo service git-daemon start|restart|stop控制。
sudo /etc/init.d/git-daemon start|restart|stop也可以了。
2.添加manifest.git仓库
1)【在xia私钥计算机上操作】
编辑本地gitolite-admin库里的gitolite.conf,添加:
repo manifest
RW+ = xia
commit修改,push到服务器生效。
2)下载manifest.git到本地
git clone gitolite@192.168.100.249:manifest.git
3)添加dfault.xml
这个文件是跟这个Android 源码 配套的,没有自己可以参考别人的创建一个,
path 表示客户端本地路径,使用 cat default.xml | cut -d ‘”’ -f 2 提取,
name 表示服务端远程路径,使用 cat default.xml | cut -d ‘”’ -f 4 提取。
<manifest>
<remote name="yazuo"
fetch=".."
review="ssh" />
<default revision="master"
remote="yazuo"
sync-j="1" />
<project path="build" name="yazuo/platform/build" >
<copyfile src="core/root.mk" dest="Makefile" />
project>
<project path="abi/cpp" name="yazuo/platform/abi/cpp" />
<project path="art" name="yazuo/platform/art" />
<project path="bionic" name="yazuo/platform/bionic" />
<project path="bootable/bootloader/lk" name="yazuo/platform/bootable/bootloader/lk" />
<project path="bootable/diskinstaller" name="yazuo/platform/bootable/diskinstaller" />
<project path="bootable/recovery" name="yazuo/platform/bootable/recovery" />
<project path="cts" name="yazuo/platform/cts" />
<project path="dalvik" name="yazuo/platform/dalvik" />
<project path="developers/build" name="yazuo/platform/developers/build" />
<project path="developers/samples/android" name="yazuo/platform/developers/samples/android" />
<project path="development" name="yazuo/platform/development" />
<project path="device/asus/deb" name="yazuo/device/asus/deb" />
<project path="device/asus/flo" name="yazuo/device/asus/flo" />
<project path="device/asus/flo-kernel" name="yazuo/device/asus/flo-kernel" />
<project path="device/asus/grouper" name="yazuo/device/asus/grouper" />
<project path="device/asus/tilapia" name="yazuo/device/asus/tilapia" />
<project path="device/common" name="yazuo/device/common" />
<project path="device/generic/armv7-a-neon" name="yazuo/device/generic/armv7-a-neon" />
<project path="device/generic/common" name="yazuo/device/generic/common" />
<project path="device/generic/goldfish" name="yazuo/device/generic/goldfish" />
<project path="device/generic/mips" name="yazuo/device/generic/mips" />
<project path="device/generic/mini-emulator-armv7-a-neon" name="yazuo/device/generic/mini-emulator-armv7-a-neon" />
<project path="device/generic/mini-emulator-mips" name="yazuo/device/generic/mini-emulator-mips" />
<project path="device/generic/mini-emulator-x86" name="yazuo/device/generic/mini-emulator-x86" />
<project path="device/generic/x86" name="yazuo/device/generic/x86" />
<project path="device/google/accessory/arduino" name="yazuo/device/google/accessory/arduino" />
<project path="device/google/accessory/demokit" name="yazuo/device/google/accessory/demokit" />
<project path="device/lge/hammerhead" name="yazuo/device/lge/hammerhead" />
<project path="device/lge/hammerhead-kernel" name="yazuo/device/lge/hammerhead-kernel" />
<project path="device/lge/mako" name="yazuo/device/lge/mako" />
<project path="device/lge/mako-kernel" name="yazuo/device/lge/mako-kernel" />
<project path="device/sample" name="yazuo/device/sample" />
<project path="device/samsung/manta" name="yazuo/device/samsung/manta" />
<project path="docs/source.android.com" name="yazuo/platform/docs/source.android.com" />
<project path="external/aac" name="yazuo/platform/external/aac" />
<project path="external/android-clat" name="yazuo/platform/external/android-clat" />
<project path="external/android-mock" name="yazuo/platform/external/android-mock" />
<project path="external/ant-glob" name="yazuo/platform/external/ant-glob" />
<project path="external/antlr" name="yazuo/platform/external/antlr" />
<project path="external/apache-harmony" name="yazuo/platform/external/apache-harmony" />
<project path="external/apache-http" name="yazuo/platform/external/apache-http" />
<project path="external/apache-xml" name="yazuo/platform/external/apache-xml" />
<project path="external/arduino" name="yazuo/platform/external/arduino" />
<project path="external/bison" name="yazuo/platform/external/bison" />
<project path="external/blktrace" name="yazuo/platform/external/blktrace" />
<project path="external/bluetooth/bluedroid" name=