首先,根据http://www.cnblogs.com/xl19862005/archive/2011/06/28/2092464.html 来进行安装应该就可行的。
但是,后来在测试添加已有项目一步,把gitosis搞乱了,结果无论怎么弄都出错,无法clone。于是就总结出了一篇常见错误:
http://blog.csdn.net/xzongyuan/article/details/9332735
安装过程中很多疑问,在这里记录下来。
1.关于client和server
server:需要安装gitosis,openssh,它其实就是一个管理/home/git/authories_keys的工具,参考这篇gitosis浅析的文章可以大概了解什么是gitosishttp://geeklu.com/2012/10/gitosis/
client: 只需要安装git 和 openssh就行了。
2.gitosis需要验证密码吗?
git通过ssh验证用户,如果你的gitosis工作正常,是不需要验证密码的,但是我碰到了要求输入密码的问题,一直都没留意。所以,你要百度下ssh的两种验证方式。如果要求你输入密码,表示你的gitosis没有配置成功。我用gitoisis-init重新初始化,发现没有解决问题。因为gitosis.conf的内容没有改变,keydir下的文件没改变,/home/git/.ssh/authorized_keys也没变。所以,我把和gitosis有关的文件夹都删除,再重新gitosis-ini一下,就可以了。具体删除什么样的文件可以参照我上面的那个常见错误链接。
3.关于repositories路径问题
我们通常这样初始化:sudo -H -u git gitosis-init < /tmp/id_rsa.pub
这句话意思就是在用户git(对应-u)的Home(对应-H)下,利用/tmp/id_rsa.pub初始化。为啥要放在/tmp下?因为同一台计算机的不同用户都可以登录到/tmp下读写,而其它路径不是没有读的权限,就是没有写的权限,所以在/tmp下操作方便。
初始化后,你会在/home/git/.ssh下看到多了个authorized_keys,你可以看看id_rsa.pub的内容是否读进去了。如果错误,就会在你clone时要求你输入密码。
初始化 后,还会在/home/git/下生成文件夹
gitosis
repositories
另外还有一个隐藏文件
.gitosis.conf
你可以输入命令ll看下。它会指向repositories下的gitosis的版本仓库里的gitosis.conf。
为了方便,我们不会直接就gitosis-init,而是先这样作:
1.生成/home/repo这个目录,所有者为git,给予git可读写权限
2.然后输入命令ln -s /home/repo /home/git/repositories
注意,这里是建立一个软链接到/home/repo,即你点击/home/git/repositories后,就会进入/home/repo。这样用意就是:如果路径下已经有这个链接,gitosis就不会再创建,也不会覆盖它,而是直接就用它作版本仓库,这样,实际上的版本仓库就变成/home/repo了。以后你clone时,就是clone这个目录:
git clone git@
4.认识git clone
经常看到git init,那么clone时候,需要git吗?
不需要,随便mkdir一个文件夹,就可以clone了。
5.认识gitosis-admin.git
毕竟刚安装gitosis的人,可能很多菜鸟,那么就会被gitosisi搞晕。
请记得gitosis的操作方法:在client端操作,而不是在server端(当然你也可以在server端操作)。它是一个版本仓库,是一个纯仓库,没有工作目录的。当然client端的gitosis.conf和keydir你都能在client找到,但是不要去动server端的,否则你client端的管理员想push,就会出错。
那么,只要你想加一个用户,加一个文件的权限等,你就要去client端,随便找个地方clone下来gitosis-admin.git这个仓库,然后修改,然后执行提交操作:
git add .
git commit -am "写入你希望的自定义log信息"
git push origin master
gitosis-admin的作用就是:管理员可以带着笔记本到处走,也可以不必保存这个仓库,即使笔记本格式化了也没问题。下次装好系统好,直接clone下server的那个gitosis-admin.git就可以获取最新的gitosis,然后修改,再push一下就行了,下次你觉得 某个修改不正确,还可以回滚一下;因为采用git管理,还可以多个管理员共同管理,使用不同的branch去修改server端等。认识了这个作用,就不必质疑它为啥那么麻烦了。
6.关于client端和server端的版本仓库的权限问题
你不必担心权限问题,不要自己去chmod或者chown 仓库的文件。client端提交更改后,server端自动会把更改的权限和拥有者改为server端的git。
7.认识SSH
不要忘记,你clone时候用的是ssh加密,所以,如果你出现了任何认证问题,不是gitosis.conf写错,就是ssh加密的密钥对过时,要删除重新认证。