ossxp gitolite 改进

改进内容:

1. 解决了因路径名称导致钩子设置的问题

https://github.com/purple-dragon/gitolite/commits/master  中 id 56f685...1144d887的commit即 "fix path to ensure replace in gl-system-instll work well"

2. 增加了将 gitolite提供的配置和钩子(/home/git/bin/gitolite/share/gitolite/conf and hooks目录)拷贝到$GL_ADMINDIR/hooks/   // GL_ADMINDIR == ~/.gitolite/

https://github.com/purple-dragon/gitolite/commits/master  中 id 13fdb5...ee8d05b9的commit即 "improve gl-install: copy hooks in package to"

3. 将各个repo的hook指向$GL_ADMINDIR/hooks中的钩子,而非原来的安装路径(如本文用的/home/git/bin/gitolite/share/gitolite/hooks/)下的钩子

https://github.com/purple-dragon/gitolite/commits/master  中 id a2ea64...a9d9c612的commit即 "do not use hooks in $GL_PACKAGE_HOOKS, use hooks in $GL_ADMINDIR instead"


改进后的gitolite可以从此处获得:
git clone git://github.com/purple-dragon/gitolite.git

将下面step6直接命令:$gl-setup /tmp/username.pub   // 如果配置文件~/.gitolite.rc改变了,要重新执行gl-setup无参
(可以不改任何文件, 当然.gitolite.rc中有不合适的配置是可以修改的,GL_PACKAGE_HOOKS & GL_PACKAGE_CONF就不用改了,已经自动改成安装路径了)


蒋鑫版(git clone git://github.com/ossxp-com/gitolite.git) 安装步骤:

root用户下做如下事情
1. groupadd git  // 添加group:git


2. adduser -r -m --shell /bin/bash --group git  git  // 创建专用账号git,所有用户都用此账号访问git库
            // -r create a system account     (centos -r, ubuntu 是 --system)
            // -m create home dir
            // -s, --shell The name of the user’s login shell, if it's empty then system will choose a default shell
            // -g  specify an existing group

            // 最后的git是用户名


切换到git账号
3. mkdir -p /home/git/bin/gitolite/share/gitolite/conf/ /home/git/bin/gitolite/share/gitolite/hooks/


4. 下载gitolite
git clone git://github.com/ossxp-com/gitolite.git


4.1 ssh-keygen  
   // Enter file in which to save the key (/home/git/.ssh/id_rsa):
   // 指定/home/git/.ssh/git, 如果不指定路径,则在当前路径
   // Enter passphrase (empty for no passphrase):  这里直接回车
   // 最后生成公钥(/home/git/.ssh/git.pub)和私钥(/home/git/.ssh/git)
4.2 cp ~/.ssh/username.pub ~/tmp/  // 备用
4.3 系统环境变量加上 PATH=$PATH: /home/git/bin/gitolite

5. 安装
5.1 rm -rf ~/.gitolite/  ~/.gitolite.rc  ~/.gitconfig // 删除旧的gitolite信息
      rm -rf ~/.ssh/authorized_keys 
      rm -rf /home/git/bin/gitolite/*  //删掉以前的安装版本


5.2 采用源代码方式安装gitolite(到gitolite源码所在位置, 上面clone下来的目录/gitolite/src/执行下面的命令)
$./gl-system-install /home/git/bin/gitolite  /home/git/bin/gitolite/share/gitolite/conf/ /home/git/bin/gitolite/share/gitolite/hooks/
如果gitolite有更新,则也需要用上面的命令来重装gitolite


6. 用gitolite创建仓库
6.1 编辑/home/git/bin/gitolite/gl-setup
    把GL_PACKAGE_CONF变量改成上面安装gitolite的配置目录,如:

    GL_PACKAGE_CONF=/home/git/bin/gitolite/share/gitolite/conf/   // 否则会打开一个空的~/.gitolite.rc,就不知道该如何往里写配置信息了
     // 因为gl-system-install有问题,所以安装以后还要手工改安装目录中的这个文件gl-setup,见6.3.2

6.2 $ gl-setup /tmp/username.pub   // 这里提供的公钥是作为管理员的(用ssh-keygen生成,在~/.ssh/目录下)
      // 如果配置文件~/.gitolite.rc改变了,要重新执行gl-setup无参

     -- 其中有内容, 且自于$GL_PACKAGE_CONF/example.gitolite.rc
         因此上面要指定相应的文件(如果没有的话,可能会建立一个空文件,也可能这条命令不能执行)
     --  编辑自动打开的.gitolite.rc文件:
        ---  一定要修改$GL_PACKAGE_HOOKS ,改成gl-system-install指定的hook目录即/home/git/bin/gitolite/share/gitolite/hooks
             否则($GL_ADMINDIR(~/.gitolite)/hooks目录中将没有钩子脚本)钩子就不能正确设置, 就失去了gitolite提供给各个仓库的钩子功能
         ---  可以修改 gitolite自动建立的 仓库根目录的名称$REPO_BASE , 默认是repositories, 也可以改成其他名字,如 repos本文使用默认repositories
               但gl-setup执行之后就不要修改该名字
     -- .gitolite.rc编辑完成后保存退出,继续自动执行:
         creating gitolite-admin...
         Initialized empty Git repository in /home/git/repos/gitolite-admin.git/     // 自动创建了gitolite-admin库
         creating testing...
         Initialized empty Git repository in /home/git/repos/testing.git/                // 自动创建了testing库,可用于测试,没有任何提交
         [master (root-commit) a88bdee] start                                                         //  自动对gitolite-admin库进行一次提交,包括:
         2 files changed, 6 insertions(+)
         create mode 100644 conf/gitolite.conf                                                      //  添加授权配置文件,包含了gitolite-admin & testing两个库的授权
         create mode 100644 keydir/git.pub                                                           //  将gl-setup指定的公钥文件添加到keydir/下面
     -- 自动创建了/home/git/.gitolite/
         conf/gitolite.conf   // 自动生成,这个是授权文件

         keydir/                  // 将username.pub自动拷贝到这里
         hooks/                  // 将gitolite提供的hook文件自动拷贝到此(ossxp-com版本的安装程序有问题,所有这里是空的)

         更新~/.ssh/authorized_keys  //这个文件中就会有git用户的信息
6.3 钩子的设置有问题: clone出来的gitolite-admin不能管理新仓库的创建,授权等操作,其他仓库也没有用上gitolite提供的钩子

6.3.1 手工解决法:// 如果上面编辑.gitolite.rc时,忽略了$GL_PACKAGE_HOOKS,则可以现在手工做

  6.3.1.1. 修改 ~/.gitolite.rc的环境变量$GL_PACKAGE_HOOKS = "/home/git/bin/gitolite/share/gitolite/hooks";
  6.3.1.2. 执行gl-setup,无参  (执行后 ~/repos/中的各个repo的hooks目录中的钩子都指向/home/git/bin/gitolite/share/gitolite/hooks)

6.3.2 彻底解决法:// 完成后重新执行5~6.2
因为gl-system-install中replace( "/tmp/share/gitolite/conf",  $conf_dir,  "$conf_dir/example.gitolite.rc" );是将临时目录修改成实际安装目录,其中

$conf_dir/example.gitolite.rc,$conf_dir === /home/git/bin/gitolite/share/gitolite/conf/

$bin_dir/gl-setup,$bin_dir ===  /home/git/bin/  

这2个目录中的example.gitolite.rc和gl-setup实际是gl-system-install安装时从gitolite源码包里的conf/example.gitolite.rc和 src/gl-setup拷贝过来的,

因此改的是这两个位置的文件,不是安装路径(/home/git/bin/ 和 /home/git/bin/gitolite/share/gitolite/conf/)下的

由于这两个文件中的“/tmp/share/gitolite/conf” 被改成了"/usr/share/gitolite/conf"所以这个替换并没有完成,

因此把这两个文件中的路径中的usr改回tmp即可,或者把src/gl-system-install中replace( "/tmp/share/gitolite/conf",  $conf_dir,  "$conf_dir/example.gitolite.rc" )的 tmp改成usr


P.S.
.gitolite.rc中有下面两个变量,会被gl-setup中设置的改名变量重新赋值
$GL_PACKAGE_CONF = "/usr/share/gitolite/conf";  // 所以.gitolite.rc这个变量改不改都会被gl-setup中的该变量重新赋值
$GL_PACKAGE_HOOKS = "/usr/share/gitolite/hooks"; // 这个要改,因为gl-setup并没有对该变量重新赋值,而且gl-install中也用到了该变量,不改不行


7. 主机别名
添加文件,~/.ssh/config,内容如下
host gitolite
     user git
     hostname serverip
     port 22
     identityfile ~/.ssh/admin


8. 设置好~/.ssh/config 若碰到下面的error
Bad owner or permissions on $HOME/.ssh/config
则将.ssh/config 的文件的权限改成和 .ssh目录一样即可


9. 如果不设置主机别名git clone git@localhost:gitolite-admin 时会有警告说clone了一个空仓库,clone出来的仓库也是空的,没有任何提交记录。
  clone出来的不是repos/gitolite-admin/ (git log查看可以看到有一次提交 comments是 gl-setup 命令 (e.g.   gl-setup /home/git/git.pub))


10. 新增版本库以及该版本库的第一次推送

10.1 cd ~

git clone git@gitolite:repositories/gitolite-admin

10.2 编辑 ~/gitolite-admin/conf/gitolite.conf 新加如下内容:

repo mytest
    RW+     =   @all

10.3 提交这次修改,并推送,这时在~/repos中就会自动生成mytest.git,且没有任何提交

10.4 clone出mytest :  git clone git@gitolite:repositories/mytest

往mytest添加内容并commit,然后push,则会出现如下错误

fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@localhost:mytest' 


//  这是Git 找不到你要提交的版本了
解决方法:
git push origin master    // 将master 推送到origin,以后每次就只要用git push就行了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值