文章目录
  1. 1. 0. 前言
  2. 2. 1. 参考教程及前方深坑
  3. 3. 2. 深坑感言
  4. 4. 3. reference

0. 前言

想在自己的VPS上搭建一个Git服务器,这样可以避免拙劣的代码外漏,又可以利用版本管理的好处。在网上搜了几篇教程,然后开始踩坑,专业踩坑30年。

1. 参考教程及前方深坑

这一篇博文把参考教程列在文章里面,因为没有什么技术难度,主要是坑,所以记录一下踩到的坑。
搭建Git服务器 - 廖雪峰的官方网站
廖大大的这篇是百度出来排第一的,然而他推荐的是Ubuntu或Debian系的系统,而我的VPS是CentOS系统,yum与python之间纠缠不清的关系想必遇到过的人都懂。但也不是完全没参考价值,至少我知道了git服务器搭建大致需要哪几个步骤。

CentOS 6.5下Git服务器搭建
主要参考了这篇教程,前面一大片关于git的介绍不用管它,注意两个地方,一是服务端的git它是从源码编译安装的,版本号跟直接安装的git不一样,二是它安装的gitosis.git地址好像不对,我访问时是403拒绝访问,用 https://github.com/tv42/gitosis.git 代替就好。
即便完全按照教程来,也可能会遇到第一个坑:gitosis无法安装,提示没有setuptools模块。然而无论你是查看pip还是查看whereis,都可以找到setuptools模块。
原因:我当时使用的是另一个账号登陆的,而setuptools模块是在root下安装的,这时候即便你用当前账号安装setuptools也会提示已经有了。
解决:切换回root账号再次运行安装就好了。

然后在生成了rsa密钥,导入的时候可能遇到第二个坑:
#sudo -H -u git gitosis-init < ~/id_rsa.pub
gitosis-init命令找不到。
这个只要将gitosis-init替换为它的绝对路径即可。

如果你是windows客户端,就会遇到我遇到的第三个坑:
在windows客户端使用git clone的时候,
Permission denied (publickey) fatal: Could not read from remote repository
原因:显然是权限问题,windows客户端的ssh好像是telnet的服务,即便有id_rsa私钥,也需要转换一下格式才能识别。然而光是这样还不够,还需要参考教程修改了SSH默认端口之后,如何配置git?中的ssh远端指定ssh访问端口。
解决:我用sourcetree的ssh助手导入id_rsa并且另存为了ppk格式的私钥,在plink中导入私钥之后,直接在sourcetree中新建仓库,远程地址写ssh://git@VPS_IP:port/gitosis-admin.git,成功发现并克隆仓库。VPS_IP和port换成你自己的。另外如果你安装了MingWin那么还有比较方便的做法,就是在.ssh目录下放上你的rsa私钥,并用config配置一下远端服务器,就可以做到ssh识别了,参见拉取远程私有服务器的git仓库

注意,教程中客户端系统是CentOS,仓库中文件都是.开头的隐藏文件,但在windows下这些都不是隐藏文件了。以后配置vps git服务器的访问权限,只需要维护这个特殊的仓库就可以。教程后面是对这个仓库维护的示例,也可以单独搜索gitosis的相关文档。

现在我们已经克隆了权限管理仓库,该放在服务端的公钥、客户端的私钥也已经放好了,可以试着配置使用者。
按照教程配置好,先把管理仓库推送到远端(教程没有提到),然后试着建立自己的git-test仓库。
第四个坑出现了:推送失败,提示无权限。
看错误提示就知道它与第三个坑有联系,其实原因是一样的:默认连接是https,但是centos并不支持这么搞,需要指定访问方式为ssh。
解决:git remote add origin ssh://git@VPS_IP:port/git-test.git
然后push就可以成功了。

以后只要在keydir下添加公钥,修改.conf文件添加新的仓库,再推送到服务器,就可以添加新的用户和仓库了。新用户只要配置好相应的私钥,就可以直接访问有权限的仓库。

2. 深坑感言

别用windows


2015-07-17更新:
被OpenSSH和Putty的私钥坑得不行不行的,各种互不兼容。终于还是把gitosis搞坏了,而且gitosis很久没更新,于是全面迁移到gitolite。当然,不兼容的还是不兼容,真坑。
gitolite与gitosis大同小异,如果你按照之前的教程安装过gitosis,那么这里只需要安装gitolite并配置好公钥就行了,管理方式和gitosis一毛一样。如果是全新安装,教程在此
Windows下的Putty Key Generator导入OpenSSH生成的私钥之后格式是有问题的,不太通用。Putty自身生成的SSH key 也不能直接用。格式上的问题主要在换行,本来不该换行的但是经过Putty导出之后就会换行,只要文本格式打开修复一下换行问题和文件头的类型说明,去掉莫名其妙的注释,就可以通用了。本来嘛,私钥也就是一个随机串和不对称加密之后的结果,一边保存一个串,在验证的时候用算法算一下是否相等而已,本质上就是文本。


3. reference

搭建Git服务器 - 廖雪峰的官方网站
CentOS 6.5下Git服务器搭建
修改了SSH默认端口之后,如何配置git?
StackOverflow:’Permission denied (publickey) fatal: Could not read from remote repository’

文章目录
  1. 1. 0. 前言
  2. 2. 1. 参考教程及前方深坑
  3. 3. 2. 深坑感言
  4. 4. 3. reference