1. 说明
百度、谷歌搜索“搭建git服务”,会出现一大堆文档,大多数说的都不清楚,可能是拷贝、粘贴或转载过程的疏忽,不过基本步骤还是都有的,如果耐心研究尝试还是能够完成搭建管理工作。
本文是笔者经过查询网上文档,集合若干家之言,再加上自己的摸索尝试后整理推出,仅供大家参考,如若有疏漏错误之处还请各位亲批评指正,现在这里谢过!
本文档的操作环境如下:
Cpu型号 | Intel(R) Xeon(R) CPU E5620 @ 2.40GHz |
操作系统 | Ubuntu 10.04.4 LTS |
GCC | gcc (GCC) 4.1.3 20080704 |
在进行后续步骤前请先确认系统中是否安装如下依赖(这里一般都系统都有,如果不巧没有,可自行安装之:apt-get)
1) Ssh服务
2) Python、perl
3) Python-setuptools(当用sudo python setup.py install安装时才需要)
其实上述安装如果没有的话,在用apt-get安装git时会自动将依赖安装。
2. 安装Git
Linux系统上安装软件就是那几个套路,比windows下双击然后一直next也复杂不了多少。总的来说也就两种方式,一个是通过apt-get(限于ubuntu、debian等系统),命令: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的权限管理方式gitosis和gitolite之后,最终选定了gitolite。原因很简单,gitosis是最先尝试的,经过无数次的修改配置、文件属性等等方法之后,错误依然,n次google之后问题依旧,不过值得庆幸的是,google的时候虽然没有解决问题,但是却让我对gitosis绝望了,因为看到了下面这样的话:
“First I would use gitolite instead. Gitosis is no longer actively developed.”
促使了我最终还是选择了gitolite,也非常推荐使用这个。
Gitolite用的人比较多,安装配置网上说明都比较详细,在此就不班门弄斧,仅将查到的几个手册链接放到这里供大家参考学习。
Gitolite的wiki
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-daemon的wiki:
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-daemon的man 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. 基本命令
Fetch和pull的使用 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/