搭建Git服务器

来源:互联网 发布:剑灵n卡优化设置 编辑:程序博客网 时间:2024/05/16 09:57

在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。

GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

假设你已经有sudo权限的用户账号,下面,正式开始安装。

第一步,安装git

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

第三步,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第四步,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

$ sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git

$ sudo chown -R git:git sample.git

第五步,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone git@server:/srv/sample.gitCloning into 'sample'...warning: You appear to have cloned an empty repository.

剩下的推送就简单了。

管理公钥

如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。

这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

管理权限

有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。

这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。

小结

  • 搭建Git服务器非常简单,通常10分钟即可完成;

  • 要方便管理公钥,用Gitosis;

  • 要像SVN那样变态地控制权限,用Gitolite。


您的支持是作者写作最大的动力!

如果您喜欢这个教程,读后觉得收获很大,预期工资涨幅能超过30%,不妨小额赞助一下,让我有动力继续写出高质量的教程。

请狠狠地点击下面的按钮:

我要小额赞助


教程没看明白?

请在问答区提问,贴上代码和出错信息:

去问答区交流


 上一篇:配置别名   ···   下一篇:期末总结 

<iframe id="cproIframe_u1706819_1" width="728" height="90" src="http://pos.baidu.com/acom?adn=3&amp;at=103&amp;aurl=&amp;cad=1&amp;ccd=24&amp;cec=UTF-8&amp;cfv=11&amp;ch=0&amp;col=zh-CN&amp;conOP=0&amp;cpa=1&amp;dai=1&amp;dis=0&amp;ltr=http%3A%2F%2Fwww.liaoxuefeng.com%2Fwiki%2F0013739516305929606dd18361248578c67b8067c8c017b000%2F001375234012342f90be1fc4d81446c967bbdc19e7c03d3000&amp;ltu=http%3A%2F%2Fwww.liaoxuefeng.com%2Fwiki%2F0013739516305929606dd18361248578c67b8067c8c017b000%2F00137583770360579bc4b458f044ce7afed3df579123eca000&amp;lunum=6&amp;n=89046089_cpr&amp;pcs=1903x1074&amp;pis=10000x10000&amp;ps=2065x705&amp;psr=1920x1200&amp;pss=1903x2175&amp;qn=f076b3d37df35a37&amp;rad=&amp;rsi0=728&amp;rsi1=90&amp;rsi5=4&amp;rss0=%23FFFFFF&amp;rss1=%23FFFFFF&amp;rss2=%230088CC&amp;rss3=%23333333&amp;rss4=%230088cc&amp;rss5=&amp;rss6=%23e10900&amp;rss7=&amp;scale=&amp;skin=&amp;td_id=1706819&amp;tn=text_default_728_90&amp;tpr=1421467397767&amp;ts=1&amp;xuanting=0&amp;dtm=BAIDU_DUP2_SETJSONADSLOT&amp;dc=2&amp;di=u1706819" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true"></iframe>

喜欢这篇文章?

杨振James 洪湖娱乐网 17人赞过

分享给朋友

评论

冬唐fly 1月6日 17:28

@Evin20

@廖雪峰

我遇到的问题和楼上一摸一样,请问如何解决呢?公钥和权限都是给对了的。

回复
小学生董宏飞 1月4日 22:00

您好,我在我的博客转载了您的这篇文章<a href="http://donghongfei.com/p323.html">http://donghongfei.com/p323.html</a>

回复
lavinias 1月1日 23:01

Gerrit和git一起用也挺不错的,廖老师也可以介绍介绍  应该有很多人可以学习并应用  呵呵

回复
Me谷小乐 2014年12月28日 17:07

廖老师  ,你好!请问第六步的git clone git@server:/srv/sample.git

中的server 指的是git服务器的ip地址吗?能详细说明下吗?谢谢啦!

回复
眼镜蜀黍- 2014年11月9日 9:27

git不使用远程仓库,没办法团队合作修改代码吧,怎么感觉比svn也没多少优势啊。另外windows平台能实现git仓库搭建吗

回复
Evin20 2014年9月12日 11:05

@廖雪峰

我没改passwd文件, 不管是在git服务器上还是在远程机器上, 都提要示要密码...

啥原因呢

回复
Evin20 2014年9月12日 11:04

@石峰Away

我没改passwd文件, 不管是在git服务器上还是在远程机器上, 都提要示要密码...

啥原因呢

回复
石峰Away 2014年9月10日 9:17

@石峰Away

找到问题出现在哪里了,没有去改passwd文件就没有问题

回复
廖雪峰 2014年9月10日 9:12

@石峰Away

你的机器是L,远程机器是R,远程用户是git,你的公钥要放到R的/home/git/.ssh/authorized_keys,你的私钥必须在L上<用户主目录>/.ssh/id_rsa。

回复
石峰Away 2014年9月9日 17:57

当前用户公钥已存入authorized_keys文件,然后在远程库的同一台机器上git clone的时候还会提示git@localhost's password:,这个大概会是什么原因

回复
廖雪峰 2014年9月1日 13:04

@白宝冰King

你这是典型的linux权限配置问题,google一下chown/chmod

回复
白宝冰King 2014年9月1日 11:54

。。。。。。峰哥     

git@VM-140-95-ubuntu:/tmp/git1$ git clone git@localhost:/tmp/git/sample.git

fatal: could not create work tree dir 'sample'.: Permission denied

回复
白宝冰King 2014年9月1日 11:46

为什么 到这块 没有视频啊 ,峰哥

回复
廖雪峰 2014年9月1日 10:54

@白宝冰King

请仔细阅读“远程仓库”一节

回复
白宝冰King 2014年8月31日 23:51

马上就ok了,卡这了,峰哥

回复
白宝冰King 2014年8月31日 23:51

峰哥 ,第三步真心不明白,恳请峰哥,答复。。。

回复
蜗牛你快跑呀 2014年8月29日 18:06

@sunyang的一天

普通用户是无法创建用户的,

$ sudo useradd git  这里切换到管理员,使用管理员权限创建git用户。

如果是#号提示符,表示是root身份,因此就不需要了sudo了

# useradd git

回复
廖雪峰 2014年7月18日 14:37

@周梦康

要注意git操作远程服务器的用户是git,确保owner:group都显示git:git,仓库目录也必须是git:git

回复
周梦康 2014年7月17日 16:29

我是参考的 https://help.github.com/articles/generating-ssh-keys 生成的key,添加到github上,测试,正常连接。

但是我把这个公钥复制到自己的服务器的/home/git/.ssh/authorized_keys就怎么也连接不上,目前.ssh目录权限是 600 ,authorized_keys文件权限也是 600

一直提示有没有权限,仓库是否存在,我能ssh远程连接 22 端口也应该是开了的。

回复
戒不掉的是别人的人生 2014年7月9日 16:52

我按照这个步骤怎么第六步连不上呢 是前五步完成以后直接用另外的机子进行第六步吗 只要把公钥导进去就可以了嘛 是我自己哪里弄错了吗

回复
廖雪峰 2014年7月9日 10:16

@sunyang的一天

Linux下,假定你不是root用户,需要sudo,如果是root,不需要,但是没事用root登陆不好。有的linux版本用adduser,有的用useradd,有的两个都支持。

回复
廖雪峰 2014年7月9日 10:13

@LoNeJun

没有authorized_keys先创建,然后把每个用户的id_ras.pub的内容加进去,一个用户的key是一行

回复
LoNeJun 2014年7月8日 10:20

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

以上这个步骤,请问 服务器上没有/home/git/.ssh/authorized_keys 文件,是手动创建吗?

一行一个 请问是将客户端id_rsa.pub 的内容 添加到 /home/git/.ssh/authorized_keys中?

回复
sunyang的一天 2014年7月4日 16:45

Hi,你的第二步,创建一个git用户,用来运行git服务:$ sudo adduser git

命令是不是错了?

应该是::$ useradd git

回复
kevin_readonly 2014年5月29日 9:03

没有智能手机的怎么“小额赞助”呢?

建议po主留个收款账号啊。

写的不错,对我有帮助。

回复
heartwawa 2014年4月18日 16:27

非常感谢牛人的分享,之前一直关注git但是都不知道怎么找到学习的入口,终于在您这里学习并实践了,对比他人汗颜本人速度慢,看加实践加笔记用了好几天

回复
透过笑话看悲伤 2014年4月3日 19:41

好作品....花了一下午搞了一遍,真心感谢!!真正高手不经自己理解透彻,还能很清楚讲给菜鸟听!!膜拜中...

回复
Kylin_Gu 2014年3月3日 17:15

带着练习看完了。真是大作,通俗易懂。又了解了原理,还会操作了。

回复
Threadtag 2014年2月18日 22:21

一口气看完了,很不错!

回复
颓废老板 2013年12月5日 14:46

一看就懂,赞

回复
0 0