2015-6-19-CentOS-6.5下搭建自己的Git服务器
2015-06-19 11:56
423 查看
0. 前言
想在自己的VPS上搭建一个Git服务器,这样可以避免拙劣的代码外漏,又可以利用版本管理的好处。在网上搜了几篇教程,然后开始踩坑,专业踩坑30年。1. 参考教程及前方深坑
这一篇博文把参考教程列在文章里面,因为没有什么技术难度,主要是坑,所以记录一下踩到的坑。搭建Git服务器 - 廖雪峰的官方网站
廖大大的这篇是百度出来排第一的,然而他推荐的是Ubuntu或Debian系的系统,而我的VPS是CentOS系统,yum与python之间纠缠不清的关系想必遇到过的人都懂。但也不是完全没参考价值,至少我知道了git服务器搭建大致需要哪几个步骤。
CentOS 6.5下Git服务器搭建
主要参考了这篇教程,前面一大片关于git的介绍不用管它,注意两个地方,一是这是服务端版的git,它是从源码编译安装的,版本号跟直接yum安装的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换成你自己的。
注意,教程中客户端系统是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. 深坑感言
别用windows2015-07-17更新:
被OpenSSH和Putty的私钥坑得不行不行的,各种互不兼容。终于还是把gitosis搞坏了,于是全面迁移到gitolite。当然,不兼容的还是不兼容,真坑。
3. reference
搭建Git服务器 - 廖雪峰的官方网站CentOS 6.5下Git服务器搭建
修改了SSH默认端口之后,如何配置git?
StackOverflow:’Permission denied (publickey) fatal: Could not read from remote repository’
CentOS升级Git
相关文章推荐
- centos6.6安装后系统配置
- linux编程C/C++如何自动打开一个终端并且运行新程序
- Linux 基础之查看CPU信息
- (转)Linux系统调用--getrlimit/setrlimit函数
- linux下core文件调试方法(转载)
- linux下vi命令大全
- linux 命令——51 lsof(转)
- Linux日志:rsyslog及loganalyzer(一)
- 理解Linux系统中的load average(图文版)
- Linux rsync 同步实践
- 从Linux看系统IO
- linux 配置放火墙端口
- LINUX 进程组 会话
- (笔记)Linux Socket通信:bind: Address already in use
- Linux 守护进程的编程方法
- linux下mysql命令大全
- 在Linux下产生并调试core文件 先看看我用的是个什么机器: $ uname -a Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 E
- Linux_3.4_库函数方式文件编程
- Linux的五个查找命令
- Linux 内核之中断