ossxp gitolite 改进
2013-01-13 20:25
162 查看
改进内容:
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
但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: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: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就行了
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
但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: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: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就行了
相关文章推荐
- ossxp gitolite 改进
- 改进版截图函数(主要解决XP下保存对话框遮挡截图问题)
- Mastering Windows XP Registry
- Dropbox差异同步算法rsync及其改进算法原理
- 破解XP密码
- 多目标进化问题,根据PCI进行小区的聚类,Kmeans算法的改进:二次聚类
- java9新特性-9-语法改进:try语句
- 二分法查找(C语言,改进)
- 硬盘安装 Ubuntu 9.04 与 XP 双系统 (含 Grub 不写入 MBR 的方法)
- vs2012 update1程序不能在xp下运行解决
- 改进left函数,截取varchar需要的字符串长度
- 损失函数改进总结
- 关于IT服务:服务是需要不断改进和培训之如何去做承诺?(故事二)
- 提高与改进
- 轻量级ORM-PetaPoco及改进
- Win10 Build 10240改进汇总:浏览器性能提升
- 004 讲: 改进我们的小游戏
- 精简版XP的IIS安装
- xp最大访问人数限制?
- Zedboardwebcam设计问题篇(六)opencv处理帧数据之算法改进