Git 可以使用四种主要的协议来传输数据:SSH 协议,Git 协议和 HTTP 协议。下面将一一介绍如何在服务端和客户端搭建和使用git的这些协议。
基础环境:
git server:172.16.29.24 centos5.8
git client:172.16.29.25 centos5.8
首先需要在两在机器上都安装git,由于centos5.8默认的源中没有git,所以选择源码安装,源码安装需要安装gcc、autoconf;
#cd git-2012-11-29
#autoconf
#./configure --prefix=/usr/local/
#make;make install
#git --version
git version 1.8.0.1
注意细节:
1、在linux机器上安装完git后,默认不支持命令自动补全。对于bash用户来说,实现git命令补全非常简单:
从源码的contrib/completion目录中,找到git-completion.bash文件,复制到个人home目录,可设为隐藏文件以免后续被误删:
#cp ./git-completion.bash ~/.git-completion.bash
重新登陆终端生效,或者运行 source ~/.git-completion.bash 马上生效;
2、如果想要支持git svn 指令,需安装 subversion-perl,在centos5.8上可以用yum直接安装;
#yum install subversion-perl
首次把远端整个Subversion仓库导入到一个本地的 Git 仓库中,使用 git svn clone --username=rowe your_svn_url ;
3、在上面的搭建过程中,如果出现“Can't locate Term/ReadKey.pm in @INC”的错误,可以参考下面的解决方法,
http://blog.csdn.net/donglin425/article/details/6395448
一、ssh协议
1.git server端
首先创建一个用户git,以git用户身份登陆,创建工程仓库文件并初始化,加了--bare参数就会初始化一个不包含工作目录的仓库;
#useradd git;passwd git
#su git
#cd /home/git;mkdir project.git;cd project.git;git --bare init
2.git clinet端
安装好git后,首先对git进行一些初始化配置,例如上传者的邮件和名字等,log会使用到这些信息;
#git config --global user.email "test@gmail.com"
#git config --global user.name "test"
将服务端的空仓库克隆到本地,添加一些文件作为初始化版本,并上传至服务器
#git clone git@172.16.29.24:/home/git/project.git
#cd project;touch init.txt;git add .;git commit -m 'initial commit'
#git push origin master
第一次上传一定要指定origin master,以后可以直接git push上传
优点
使用 SSH 的好处有很多。首先,如果你想拥有对网络仓库的写权限,基本上不可能不使用 SSH。其次,SSH架设相对比较简单—— SSH 守护进程很常见,
很多网络管理员都有一些使用经验,而且很多操作系统都自带了它或者相关的管理工具。再次,通过 SSH 进行访问是安全的——所有数据传输都是加密和授权的。
最后,类似 Git 和 本地协议,SSH 很高效,会在传输之前尽可能的压缩数据。
缺点
SSH 的限制在于你不能通过它实现仓库的匿名访问。即使仅为读取数据,人们也必须在能通过 SSH 访问主机的前提下才能访问仓库,这使得 SSH 不利于开源的项目。
如果你仅仅在公司网络里使用,SSH 可能是你唯一需要使用的协议。如果想允许对项目的匿名只读访问,那么除了为自己推送而架设 SSH 协议之外,还需要其他协议来让别人获取数据。
二、git协议
待续。。。