搭建Git服务

1. 说明

百度、谷歌搜索“搭建git服务”,会出现一大堆文档,大多数说的都不清楚,可能是拷贝、粘贴或转载过程的疏忽,不过基本步骤还是都有的,如果耐心研究尝试还是能够完成搭建管理工作。

本文是笔者经过查询网上文档,集合若干家之言,再加上自己的摸索尝试后整理推出,仅供大家参考,如若有疏漏错误之处还请各位亲批评指正,现在这里谢过!

本文档的操作环境如下:

Cpu型号Intel(R) Xeon(R) CPU      E5620  @ 2.40GHz
操作系统Ubuntu 10.04.4 LTS
GCCgcc (GCC) 4.1.3 20080704

在进行后续步骤前请先确认系统中是否安装如下依赖(这里一般都系统都有,如果不巧没有,可自行安装之:apt-get

1) Ssh服务

2) Pythonperl

3) Python-setuptools(当用sudo python setup.py install安装时才需要)

其实上述安装如果没有的话,在用apt-get安装git时会自动将依赖安装。

2. 安装Git

Linux系统上安装软件就是那几个套路,比windows下双击然后一直next也复杂不了多少。总的来说也就两种方式,一个是通过apt-get(限于ubuntudebian等系统),命令:Sudo apt-get install git-core。第二种是,获取git源码,通过源码安装:./configure&&make&&make install。这两种都没什么好说,推荐使用apt-get方式,这样会将依赖包全部装上,要求是能上网或者是有内网源。

值得说明的是,为了确保万无一失,在安装git之前,先更新下apt源和安装包:

sudo apt-get update

Sudo apt-get upgrade

3. 权限管理

安装git基本上就是为了方便多人协助的开发模式,所以权限管理在所难免。Git安装过程比较简,单几条命令基本搞定,不过难就难在权限管理。

本文在尝试了两种git的权限管理方式gitosisgitolite之后,最终选定了gitolite。原因很简单,gitosis是最先尝试的,经过无数次的修改配置、文件属性等等方法之后,错误依然,ngoogle之后问题依旧,不过值得庆幸的是,google的时候虽然没有解决问题,但是却让我对gitosis绝望了,因为看到了下面这样的话:
First I would use gitolite instead. Gitosis is no longer actively developed.”
促使了我最终还是选择了gitolite,也非常推荐使用这个。

Gitolite用的人比较多,安装配置网上说明都比较详细,在此就不班门弄斧,仅将查到的几个手册链接放到这里供大家参考学习。

Gitolitewiki

https://github.com/sitaramc/gitolite

比较详细的gitolite手册

http://www.ossxp.com/doc/git/gitolite.html

Git权限管理方案比较

http://blog.ihipop.info/2011/09/2720.html

如何从gitosis迁移到gitolite

中文: http://hansay.com/2012/07/05/migrating-gitosis-to-gitolite-for-ubuntu-12-dot-04/

英文: http://www.marcus-povey.co.uk/2013/09/26/migrating-from-gitosis-to-gitolite/

4. 配置匿名访问(公共访问)

本节目的在于将git的一个或几个repo开放出来供任何人读取,而不用公钥认证,也无需密码验证。这方面的参考资料也是很多的,按照网上的步骤进行配置即可,这里仅仅列出我配置过程遇到的一些问题,和我用到的认为比较好的参考文档,共大家参考学习。

4.1. 参考资料

Git-daemonwiki

https://github.com/git/git/blob/master/Documentation/git-daemon.txt

启动git daemon的手册

中文: http://rline.blog.51cto.com/1703915/1061302

英文: http://granjow.net/git-read-access.html

Git-daemonman page 

https://www.kernel.org/pub/software/scm/git/docs/git-daemon.html

4.2. 我的问题

① 目录权限:配置过程中,一定要注意权限问题,尤其是要配置成需要公共访问的目录。我虽然也注意到了权限,但是我忽视了对一个目录有读取权限的要求是也要有这个目录的运行权限。{drwxr--r--}这样是不行的,{drwxr-xr-x}这样才是ok的。

② 我用gitdaemon用户启动的git daemon线程,结果导致,clone的时候不能获取repo里面的内容,原因还是目录权限,因为向git中添加内容后,在git server端创建的文件默认属性为{drwx------},这导致gitdaemon用户无法读取。

③ 虽然我注意到了上面第二点,但是我发现管理员向git推送新内容之后,其他客户端通过daemon进程访问公共库,仍然不能获得更新的内容,经过一番排查发现gitolite有一个对新创建文件的umask设置,在~/.gitolite.rc文件中(UMASK

④ 再好再全面的参考文档,如果完全按照其上步骤在自己电脑上进行配置也难免会遇到问题,遇到问题最好的定位错误的方法就是查看日志。daemon线程的日志可以在启动的时候指定--syslog,这样就能在/var/log/syslog中查看日志了。Gitolite日志在~/.gitolite/log/目录下。


5. 基本命令

Fetchpull的使用  http://my.eoe.cn/com360/archive/3533.html

新建库  http://www.cnblogs.com/xiaoya901109/archive/2012/08/03/2620664.html

下面命令完全拷贝自   http://www.lifeba.org/arch/git_gitosis.html

#clone一个项目

git clone ssh://git@lifeba_vps:bqueue.git

添加文件到版本库

git add test2.txt

git commit -m "add test2.txt"

git push

获取最新代码

git pull

git fetch git路径

更新文件提交

git commit -a  或 git commit -a -e   #提交全部修改文件,并调用vim编辑提交日志。

git push

查看状态

git status #查看版本库的状态。可以得知哪些文件发生了变化,哪些文件还没有添加到git库中等等。 建议每次commit前都要通过该命令确认库状态。

查看未版本控制

git clean -dxf          用于清除未跟踪文件。

git clean -dnf          可以显示需要删除的文件,但不包括被.gitignore忽略的。

冲突解决

git rebase

git add -u  表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。

git rebase --continue #有冲突继续解决,重复这这些步骤,直到rebase完成。

如果中间遇到某个补丁不需要应用,可以用下面命令忽略:

git rebase --skip

如果想回到rebase执行之前的状态,可以执行:

git rebase --abort

注:rebase之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。

6. 参考资料

(上面已经提到的除外)

[1]. Git手册 http://git-scm.com/book/zh/%E8%B5%B7%E6%AD%A5

[2]. 搭建文档 http://blog.csdn.net/wirror800/article/details/5189564

[3]. 英文文档 http://sharadchhetri.com/2013/05/31/how-to-create-own-git-server-with-gitolite-and-gitweb-in-ubuntu/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值