Git gitolite 服务器搭建

     .

      搭建心得 : 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

      



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值