.
搭建心得 : android中使用了大量的git库 ,并将其拼接在一起最后构成了工程库。 repo 是个封装后的git工具 , 可以批量的对多个git库操作 。 例如你在 使用repo init -u url1 --repo-url url2 的时候, repo是先从 url2 处 下载repo.git库 , repo库中才是真正的repo工具,可以看到里面有很多的.phy脚本 , 最开始的repo命令只是repo的引导程序 。 下载repo库之后 会去 url1的地址获取 manifest.git 库, 这个库中主要是维护了 我们项目的工程 git库 结构 , 其中的 manifest.xml 链接指向 .repo/manifests/default.xml 文件, 具体指向的是不是 default.xml是跟你在使用 repo init 命令中 -m的参数对应的,该参数制定了使用 .repo/manifests/classic/下那个xml 配置文件 。我们看看xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="origin"
fetch="../.." />
<default revision="refs/heads/LHZNJ-19r17-android-4.4"
remote="origin" />
<!-- BEGIN open-source projects -->
<project path="build" name="android/platform/build" >
<copyfile src="core/root.mk" dest="Makefile" />
</project>
<project path="abi/cpp" name="android/platform/abi/cpp" />
<project path="art" name="android/platform/art" />
。。。。。。。。。。
</manifest>
上面即是部分xml文件,一下两个解释如下 :
<remote name="origin"
fetch="../.." />
<default revision="refs/heads/LHZNJ-19r17-android-4.4"
remote="origin" />
remote表示 远程服务器 , name=“origin” , 表示该服务器用 origin表示
default表示默认project的分支归属。 上述表示每个project如果没有自己的说明将属于git分支:refs/heads/LHZNJ-19r17-android-4.4
<project path="art" name="android/platform/art" /> 这句表示一个project 位于当前工程根目录的 art目录, 它属于的git分支是: android/platform/art
以上说了些 .repo目录下的结构,可以发现 git init操作是从 url2获取了完整的 repo工具 , 然后从 url1获得项目的 git仓库组织结构文件 manifest.xml文件 。然后在使用repo sync的时候根据 manifest.xml文件从服务器获取代码 。
正文 :
1 :git-daemon-run 安装
apt-get install git-daemon-run
目前对于 git-daemon认识比较浅显 ,他是一个用于搭建 一个无口令登录访问git版本库的工具:
a、 可以确定服务器上git仓库所在的位置 。 比如 使用 repo -u url 的时候 ,当安装了 git-daemon就只需要把url写成 ip:/仓库名子 就可以了 , 因为在 git-daemon中配置了这个仓库的路径了, 否则 就要写上仓库的绝对路径 ,那样很麻烦 。
b、git-deamon可以控制git客户端的访问, 管理客户端的访问权限 。
c.如果对于版本库的提交权限有限制 可以使用gitolite工具,这样就不用安装 git-daemon-run 工具。
2. 安装git工具 和 生成公钥
这部分内容网上很多,此处略去。。。。
3. 搭建android工程
a 新建目录reposerver ,将 manifest.git 和 git-repo.git 复制到这个目录
b 使用 git clone 将manifest。git 克隆到本地 , 按照 现在工程中文件的分布 重新创建一份 manifests.xml 文件 , 注意该文件中 版本库和目录的对应关系, 如下
<project path="build" name="android/platform/build" >
表示 工程目录中的build 对应到版本库 android/platform/build , 所以在使用 repo sync的时候 repo会 这样去取版本:
git clone gitserv@IP: path/android/platform/build build
既然是这样 ,我们可以按照 工程目录的结构 来建立版本库 。 这里有个方法 , 我们修改 manifests.xml 文件 , 按照已有的 android的 工程目录文件 结构 构建版本库
的目录结构 ,例如:
<project path="build" name="build" >
<project path="kernel" name="kernel" >
注意这里的文件的当前目录是 manifest.git所在的目录, 所以上面两句就表示 在当前目录下有 build.git 和 kernel.git两个 版本库 , 分别会抽取到代码工程根目下 的
build 和 kernel 目录 。所以我们要在服务器上 创建 这两个版本库并提交我们已有的代码文件。
在建立版本库的时候 如果使用git init命令 , 创建的版本库可以被克隆但是无法提交, 需要设置该库的config文件中 bare = true ,这样才可以提交 。 但对于 gitolite ,由
于安装gitolite后 它会自动去找 目标+.git的库 , 并且该库要使用 git init --bare 命令创建, 所以还是建议使用 git init --bare 建立版本库 , 并且库名使用 .git后缀 , 例如
kernel.git , 免得和 gitolite出现冲突。
依次类推建立所有用到的版本 ,这样git库就搭建好了 。
当然这里很麻烦, 应为库很多 , 这里就需要用脚本了 。
使用 repo forall -c " echo $REPO_PATH" > repo_path.txt , 这样所有要建立的版本库路径就在 repo_path.txt文件中了 ,然后运用脚本就能搞定了 。
4. 搭建 gitolite服务器
当git 服务器搭建好之后 , 我们需要对 其进行提交权限的控制 , 这是需要安装 gitolite工具。
在ubuntu系统系操作如下 :
a。 sudo apt-get isntall gitolite
b. cp /home/admoin/.ssh/id_rsa.pub /home/gitserv/admin.pub #拷贝admin用户的 公钥文件到 安装gitolite服务器的账户 , 这个账户和 建立 git库的账户一致
c . gl-setup /home/gitserv/admin.pub #此步初始化 gitolite , admin.pub指定为 gitolite的管理员账户 , 可以对 gitolite 控制的版本库进行 权限设置 。同时也将 admin.pub也写入了 当前用户的 authorized_keys 文件中, 这样 admin用户就成了第一个可以访问 gitserv@【本机IP】:gitolite-admin.git 库的用户 。
d. c之后安装就完成了 ,完成之后会在 /home/gitserv/ 目录下生成 repositories 目录 , 这个目录就是 gitolite 所管理的版本库的位置 , 在/home/gitserv/ 目录下 还生成了.gitolite.rc文件 和 .gitolite目录 。
.gitolite.rc文件是用来配置 gitolite服务器的 , 默认的gitolite服务器不能再 权限文件中使用通配符 , 所以将 .gitolite.rc 文件中的 GL_WILDREPOS = 0; 改为 GL_WILDREPOS = 1;
e. 进入admin'账户, 将 c中的 gitserv@【本机IP】:gitolite-admin.git 库取下来, 修改 gitolite-admin/conf/gitolite.conf 文件 , 这个文件管理了 gitolite所控制下版本库的权限 。 也可以将自己已经建立好的版本库加入其中 。 加入 我们的版本库目录叫做 reposerver , 我们可以再 该文件中加入如下 :
repo ^repo-server/.+$
C = @admin
R = @all
W+ =@gitserv
上述表示 C (版本库创建者) 是all (所有人) , 那么仅有admin就对此版本库有全部权限
R 表示只读
W表示可写 , + 表示可以强制提交 。
当然 reposerver很大 , 不方便移动的话我们可以用链接,同样可以起到授权的作用 。
5 .关于 git库的创建
对于批量的建库操作可以使用脚本完成 , 可以在 服务器上 本地操作创建 , 也可以是用 git账户远程创建 。
本地创建 : git init --bare
远程创建:
mkdir kernal.git
cd kernel.git
git init --bare
git remote add origin gitserv@193.168.1.107:/repo-server/kernel.git
git push origin master