注意 本人的博客都迁移到本人自己搭建的博客地址,通过此处可查看。
一、Git在服务器上
远程仓库时一个裸仓库(bare repository):一个没有当前工作目录的仓库,仅存放Git的数据,即工作目录中的.git子目录内的内容就是裸仓库
1、协议
Git可以使用的协议有:本地传输、SSH协议、Git协议和HTTP协议(除了HTTP协议外,其他协议都需要在服务器端安装并运行Git)。
1.1 本地协议
简单的说就是硬盘上的另一个目录,常见的是团队成员对一个共享的文件系统有用访问权限
①、克隆仓库
git clone /opt/git/project.git
②、添加本地仓库作为现有Git项目的远程仓库
git remote add local_proj opt/git/project.git
③、优点:简单、同时保留现存文件的权限和网络访问权限;缺点:难以控制从不同位置来的访问权限,最主要的是访问数据的速度慢。
1.2 SSH协议
最常用的一种Git传输协议,其原因:SSH协议也是唯一同时支持读写操作的网络协议;SSH同时也是一个验证授权的网络协议;因为普通,所以架设容易
①、克隆仓库
git clone ssh://user@server/project.git
git clone user@server/project.git :不指名协议,Git默认SSH
②、优点:可以对网络仓库进行写的权限;架设简单;访问的安全性可以保障,所有数据的传输都是加密和授权的;高效性,在传输之前会压缩数据;缺点:不能进行匿名访问,不利于开源项目
1.3 Git协议
包含在Git软件包中的特殊守护进程;它监听一个提供类似于SSH服务器的特点端口(9418),而无需任何授权。
1.4 HTTP/S协议
架设的简便性:将Git的裸仓库文件放在HTTP的根目录下,配置一个特定的post-update挂钩(hook)就OK了。
①、通过HTTP对仓库进行读取:
cd /var/www/htdocs
git clone --bare /path/to/git_prj gitprj.git
cd gitprj.git
mv hooks/post-update.sample hooks/post-update
chmod a+x hooks/post-update
git update-server-info:确保HTTP的正常工作
②、优点:易于架设,可以加密传输内容;使用特定签名的SSL证书;一个额外的好处--HTTP是一个常见的协议,以至于企业级防火墙都允许其端口的通信;缺点:客户端效率较低,克隆或者下载仓库内容花费时间较多,网络开销大,常被称为傻瓜(dumb)协议。
二、在服务器上部署Git
在架设之前首先把现有仓库导出为一个裸仓库:git clone --bare prjName prjName.git,并且prjName.git的目录中已经有一份Git目录数据的副本。即:cp -Rf prjName/.git prjName.git
2.1 将裸仓库移到服务器上
访问:scp -r prjName.git user@git.example.com:/opt/git
读写:git clone user@git.example.com:/opt/git/prjName.git
有读写就有推送权限:git init --shared:Git会自动修改仓库目录的组权限为可写。
注意:若是在一个不公开的项目上合作,仅仅需要一个SSH服务器和裸仓库就OK了。
2.2 SSH连接
①、为每个人建立一个账户,反复使用adduser添加用户设置密码——不可取。
②、在主机上建立一个Git账户,让每个需要写权限的人发送一个SSH公钥,然后加入git账户的~/.ssh/authorized_keys文件;
③、让SSH服务器通过某个LDAP服务或者已经设定好的集中授权机制,进行授权。
三、生成SSH公钥
SSH公钥默认存储在账户的主目录下的~/.ssh目录,查看是否有id_dsa或者id_rsa,有.pub后缀的文件就是公钥,另一个文件这是密钥。
3.1 创建SSH公钥:ssh-keygen
将公钥发给需要的人就OK。
公钥的内容: