此文档为我工作中搭建安卓代码服务器时做的笔记。
切换到root
账户Su
安装openssh-server
用于远程登录,git
用于管理工程, keychain
用于公钥私钥管理工具
apt-get install openssh-server git keychain
添加git
账户,设置git
账户密码
adduser git
Passwd git
切换至git
账户
su - git
Gitolite
安装:这里准备了一台计算机作为服务器安装 gitolite
,一台计算机作为管理服务器的客户端。这里为了方便理解安装,使用案例形式:
服务器:
安装git-daemon-sysvinit
sudo apt-get install git-daemon-sysvinit
配置 /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"
配置分析:
GIT_DAEMON_ENABLE=true
很明显得设置成true
值了 。GIT_DAEMON_USER=gitolite
表示使用哪个用户运行git-daemon
。GIT_DAEMON_BASE_PATH
有读,写,执行的所有权限!GIT_DAEMON_BASE_PATH=/home/gitolite/repositories
设置根目录。git clone
gitolite://192.168.100.249/test.git
时,git服务器就会查找/home/gitolite/repositories/test.git
目录了。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
。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
也可以了。
创建一个用户sudo adduser yxs
客户端:创建一个用户sudo adduser yang
产生秘钥:ssh-keygen
上传至服务器:scp ~/.ssh/id_rsa.pub [email protected]:/home/yxs/admin.pub
服务器:
切换到专用账号yxs:su yxs
mkdir -p ~/bin
cd /home/git
获取gitolite:
git clone git://github.com/sitaramc/gitolite
安装gitolite
到指定目录
gitolite/install -ln ~/bin
将客户端计算机作为 gitolite
的管理员:
bin/gitolite setup -pk admin.pub
将管理员的$HOME/.ssh
文件夹下的id_rsa
复制到/home/git/.ssh
目录下并重命名为songsong
修改权限:
chown git:git feigao*
chmod 600 .ssh/feigao*
gitolite
的管理所有 gitlote
的用户、仓库和访问规则,都由一个特殊的仓库gitolite-admin
来管理,将这个仓库 clone
到你的客户端计算机:
管理服务器的客户端:
git clone [email protected]:gitolite-admin
cd gitolite-admin
新增秘钥:
将要新增的秘钥放到gitolite-admin/keydir
目录下
scp ~/.ssh/id_rsa.pub [email protected]:/home/yxs/admin.pub
新增git
仓库:
编辑本地gitolite-admin
库里的conf
下的gitolite.conf
,添加
+ +repo test + RW+ = xue
添加管理员即:
repo gitolite-admin
RW+ = yang xue
并且git add .
git commit -m “add test”
git push origin master
推送到服务器。
转到xue
用户下即可下载:
git clone ssh://[email protected]/test.git
repo
的安装:curl “http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo” > ~/bin/repo
临时设置:
运行: export PATH=$PATH:~/bin
运行:printenv PATH
查看
永久设置:
修 改/etc/profile
(对所有用户都是有效的)
vi /etc/profile
在里面加入:
export PATH="$PATH:/home/yxs/bin"
修改.bashrc
文件:修改~/.bashrc
文件。 (每个用户目录下都有,ls -all
,单独用户有效)
cd ~、vi .bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
取消设置:
用set
命令查看当前用户本地shell
设置的所有变量set
用unset
取消变量的设置unset $TESSDATA_PREFIX
manifest.git
仓库管理服务器的客户端:
编辑本地gitolite-admin
库里的gitolite.conf
,添加:
repo manifest
RW+ = yang
commit
修改,push
到服务器生效。
在用户yang
家目录下面:
git clone ssh://[email protected]/manifest.git
default.xml
文件:find aosp/ -type d -name '.git' > git_projects.txt
//git仓库
manifest/default.xml
文件:描述了远程仓库的基本信息。name描述的是一个远程仓库的名称,通常我们看到的命名是origin;fetch用作项目名称的前缘,在构造项目仓库远程地址时使用到;review描述的是用作code review的server地址。
:default标签的定义的属性,将作为标签的默认属性,在标签中,也可以重写这些属性。属性revision表示当前的版本,也就是我们俗称的分支;属性remote描述的是默认使用的远程仓库名称,即标签中name的属性值;属性sync-j表示在同步远程代码时,并发的任务数量,配置高的机器可以将这个值调大
:每一个repo管理的git库,就是对应到一个标签,path描述的是项目相对于远程仓库URL的路径,同时将作为对应的git库在本地代码的路径; name用于定义项目名称,命名方式采用的是整个项目URL的相对地址。 譬如,AOSP项目的URL为https://android.googlesource.com/,命名为platform/build的git库,访问的URL就是https://android.googlesource.com/platform/build
如果需要新增或替换一些git库,可以通过修改default.xml来实现,repo会根据配置信息,自动化管理。但直接对default.xml的定制,可能会导致下一次更新项目清单时,与远程default.xml发生冲突。
local_manifests:
所有的定制是遵循default.xml规范的,文件名可以自定义。将定制的XML放在新建的.repo/local_manifests子目录即可。repo会遍历.repo/local_manifests目录下的所有*.xml文件,最终与default.xml合并成一个总的项目清单文件manifest.xml。
仓库目录保存的是历史信息和修改记录,工作目录保存的是当前版本的信息。一般来说,一个项目的Git
仓库目录(默认为.git
目录)是位于工作目录下面的,但是Git
支持将一个项目的Git仓库目录和工作目录分开来存放。 对于repo
管理而言,既有分开存放,也有位于工作目录存放的:
git project
的裸仓库,文件夹的层次结构跟工作区的布局 一样repo
命令的主体,其中也包含最新的repo
命令,推荐时常使用这里面的 repo
命令更新你的计算机上的 repo命令,因为新版本的 repo
命令提供了更多的有助于你工作的 子命令以及选项。既然.repo
目录下保存了项目的所有信息,所有要拷贝一个项目时,只是需要拷贝这个目录就可以了。repo
支持从本地已有的.repo
中恢复原有的项目。使从源码找出所有git
仓库:
find aosp/ -type d -name '.git' > git_projects.txt
得到git_projects.txt
后,就可以据此创建default.xml
文件。
使用bash
指令去掉最后开头的 aosp/
和末尾的/.git
:
cat git_projects.txt | cut -c 6- | sed 's/.....$//' > path.txt
生成xml
文件的脚本gen_xml.sh
:
#!/bin/bash
echo -e "
" >>$1
while read line; do
echo " " >>$1doneecho -e "\n " >>$1
bash
指令创建default.xml
:
cat path.txt | ./gen_xml.sh default.xml
得到的 default.xml
里,
示例如下
先用repo --trace sync -cdf
將repo
的所有動作詳細輸出 原文網址:https://ifun01.com/7EVVFMR.html
前提:客户端 B 可以修改服务器 A 的 gitolite-admin
项目,即管理Gitolite
的项目
查看所有的git
工程
.repo/repo/repo list
repo
这里还要用到 git_projects.txt
文件。这次只要去掉每行末尾的/.git
:
cat git_projects.txt | sed 's/.....$//' > repo_path.txt
得到的每一行的格式如下:
aosp/prebuilts/devtools
编写gen_server_repo.sh
#!/bin/bash
# 声明群组 @aosp_dev , 成员: jack, tom
@aosp_dev = jack tom
# 加上 manifest 仓库echo -e "
repo aosp/manifest\n
RW+ = @aosp_dev\n" >>$1
while read line; do
echo -e "repo $line \n RW+ = @aosp_dev\n" >>$1done
bash 指令生成 aosp.conf 文件:
cat repo_path | ./gen_server_repo.sh aosp.conf
在 gitolite-admin/conf/gitolite.conf
开头加入:
include "aosp.conf"
把更新的内容 push
到服务器A
,gitolite
就会在相应目录(通常是 /home/git/repositories
)初始化所有 aosp 的所有 git
仓库。
至此,aosp
的所有仓库已经在服务器 A
生成了,下一步就是把aosp
的源码上传到服务器。
manifest/default.xml
到服务器:把之前创建好 default.xml
文件上传到服务器的 aosp/manifest
仓库:
git clone [email protected]:manifest
cd manifest## 把default.xml 文件放到 manifest/ 目录#
git add .
git commit -m 'add default.xml'
git push