1.yum install lrzsz wget git
2.安装gitosis:gitosis为Git用户权限管理系统,通过管理服务端的/home/git/.ssh/authorized_key文件来执行对用户权限的管理,是一个python模块包
#yum install python python-setuptools
#git clone git://github.com/res0nat0r/gitosis.git
#cd gitosis/
#python setup.py install
显示Finished processing dependencies for gitosis==0.2即表示成功
3.
访问Gitolite需要通过SSH 密钥来验证。在用作GIT客户端的电脑上如果还没有密钥(一个公钥,一个私钥),那么可以使用ssh-keygen命令生成,然后将公钥拷贝到GIT服务器上。
$ ssh-keygen -t rsa “[email protected]”
这里我们没有指定生成的密钥文件名称(可以通过-f filename指定),因此生成的文件为id_rsa和id_rsa.pub,前者是私钥,后者是公钥。另外,在Linux下执行ssh-keygen可以同时指定该密钥主人的email,这将出现在SSH公钥内容中。
在Gitolite建立的GIT服务器上,是通过修改gitolite-admin.git这个代码库中的源代码来创建新的代码库、为GIT客户添加登录用的公钥的。所以要管理Gitolite,必须有一个git virtual user去git clone出gitolite-admin.git的代码,这也就需要在服务器本机建立一对SSH密钥。
添加git用户
adduser --system --shell /bin/sh --comment ‘git version control‘ --create-home --home-dir /home/git git
cd /home/git
rz 选择你生成的ssh-key
4.su git
gitosis-init < ./id_rsa.pub chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
5.使用puttykeygenerator 转换 pub为ppk
在Linux下产生的私钥文件putty是不认识的,putty只认识自己的ppk格式,要在这两种格式之间转换,需要PuTTYgen这个程序。
在安装tortoisegit的时候会提示有选择项:
如果选择第一个,在安装后配置git的时候就需要注意一些东西,如果选择第二项则git的连接都是通过ssh完成,后续配置简单一些。
选择plink模式在git clone的时候需要加载ppk
putty key的生成方式:
启动putty key generator
点击load按钮将刚才最先生成的ssh中的密钥id_rsa文件导入,然后弹出对话框提示导入成功,接着点击save private key来保存ppk文件,最后在git clone的对话框中加载ppk文件即可,连接的时候会提示输入git用户的密码,输入一下即可git clone gitosis的配置文件。
如果选择ssh模式的tortoisegit,那么就无需配置ppk,直接git clone。
这里在对话框中的git url填写的时候需要注意,是直接写gitosis-admin.git,而不是加有/home/git的绝对路径了。
6.如果是直接在linux服务器上git clone,那么要注意路径问题:
git clone [email protected]:/home/git/repositories/gitosis-admin.git
否则写会提示:
1 |
fatal: ‘gitosis-admin.git‘ does not appear to be a git repository |
2 |
fatal: The remote end hung up unexpectedly |
如果是windows下,不要加用户名和绝对路径否则会报错
ERROR:gitosis.serve.main:Repository read access denied
git clone [email protected]:gitosis-admin.git
7.gitosis.conf
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = [email protected] #显示用户[email protected]是初始化gitosis公钥的拥有者,是唯一能管理gitosis-admin项目的人
[group jay_fans] #组名称
members = [email protected] #密钥用户名 多个用户名使用 空格隔开 [email protected] [email protected]
writable = git-test #项目名称
三、常见问题
首先确定 /home/git/repositories/gitosis-admin.git/hooks/post-update 为可执行即属性为 0755
1. git操作需要输入密码
- 原因
- 公密未找到
- 解决
- 上传id_pub.rsa到keydir并改为‘gitosis帐号.pub‘形式,如miao.pub。扩展名.pub不可省略
2. ERROR:gitosis.serve.main:Repository read access denied
- 原因
- gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = [email protected],但keydir中的公密名却叫foo.pub
- 解决
- 使keydir的名称与gitosis中members所指的名称一致。
改为members = foo 或 公密名称改为[email protected]
(3)出现’gitosis-admin’ does not appear to be a git repository,短路径无效时替换为全路径
在服务器上使用短路径会取现下面这个问题,原因是没有找到对应匹配的密钥所致,如果正确使用了ssh密钥则不会出现这个问题,这里就不去折腾了
[email protected]:/home/git/repositories# git clone [email protected]:gitosis-admin.git Cloning into gitosis-admin... [email protected]‘s password: fatal: ‘gitosis-admin‘ does not appear to be a git repository fatal: The remote end hung up unexpectedly
使用以下命令解决,只不过每次push和pull的时候都需要输入一遍git用户的密码,略为繁琐
git clone [email protected]:/home/git/repositories/gitosis-admin.git
(4)出现Unable to create temporary file: Permission denied
在Windows上使用TortoiseGit执行Push时出现以下错误
git.exe push --force --progress "origin" master:master Counting objects: 189, done. Compressing objects: 100% (187/187) Writing objects: 7% (14/189) fatal: Unable to create temporary file: Permission denied fatal: sha1 file ‘<stdout>‘ write error: Invalid argument error: failed to push some refs to ‘[email protected]:channelv.git‘ git did not exit cleanly (exit code 1)
原来是服务器上是用root账户建立的库目录,导致git账户无权写入,方法就是修改文件夹的所属用户和所属用户组
[email protected]:/home/git/repositories# chown -R git * [email protected]:/home/git/repositories# chgrp -R git *
(5)出现failed to push some refs to ‘[email protected]:channelv.git’
在Windows上使用TortoiseGit执行Push时出现以下错误
git.exe push --progress "origin" master:master Counting objects: 189, done. Compressing objects: 100% (158/158) Writing objects: 100% (189/189), 1016.00 KiB | 997 KiB/s Writing objects: 100% (189/189), 1.12 MiB | 997 KiB/s, done. remote: error: ‘receive.denyCurrentBranch‘ configuration variable to ‘refuse‘. To [email protected]:channelv.git ! [remote rejected] master -> master (branch is currently checked out) error: failed to push some refs to ‘[email protected]:channelv.git‘ git did not exit cleanly (exit code 1)
在服务器对应的库目录下执行以下命令增加配置即可
git config --bool core.bare true
6. 在git clone出gitolite-admin.git的代码的时候,可能会出现”Agent admitted failure to sign using the key”这个问题,然后让我们输入hosting user的密码。
$ git clone [email protected]:gitolite-admin.git
Cloning into ‘gitolite-admin‘...
Agent admitted failure to sign using the key.
[email protected]‘s password:
Permission denied, please try again.
[email protected]‘s password:
Permission denied, please try again.
[email protected]‘s password:
Permission denied (publickey,password).
fatal: The remote end hung up unexpectedly
$
这是SSH的问题。参考资料[3]中提供了解决方法:
https://help.github.com/articles/error-agent-admitted-failure-to-sign
centos 安装git server