您的位置:首页 > 其它

搭建Git远程仓库

2016-04-18 15:01 190 查看
远程仓库通常只是一个 裸仓库(bare repository), 即一个没有当前工作目录的仓库。因为该仓库只是一个合作媒介,所以不需要从硬盘上取出最新版本的快照;仓库里存放的仅仅是 Git 的数据。简单地说,裸仓库就是你工作目录中.git 子目录内的内容。

1、在服务器上部署 Git

yum安装Git

yum install -y git


初始化Git仓库

先选定一个目录作为Git仓库,这里是/data

[root@localhost data]# git init --bare project.git
Initialized empty Git repository in /data/project.git/


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

创建一个git用户,把owner改为git

useradd git ; passwd git
chown -R git.git project.git


客户端克隆远程仓库

$ git clone git@192.168.198.132:/data/project.git
$ ls
project/


安装客户端,linux上直接yum安装git,windows这里下载客户端https://git-scm.com/download/win

客户端上传公钥,免密码登录

$ ssh-keygen -P ''
$ ssh-copy-id -i ~/.ssh/id_rsa.pub  git@192.168.198.132


禁用shell登录

sed -i '/^git:/s#/bin/bash#/usr/bin/git-shell#' /etc/passwd


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

客户端推送

$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master


到此已经搭建完成了

2、协议

Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议

除了 HTTP 协议外,其他所有协议都要求在服务器端安装并运行 Git。

SSH 是同时支持读写操作的网络协议。另外两个网络协议(HTTP 和 Git)通常都是只读的

本地协议

如果你使用一个共享的文件系统,就可以在一个本地文件系统中克隆仓库,推送和获取。克隆的时候只需要将远程仓库的路径作为 URL 使用,比如下面这样:

$ git clone /opt/git/project.git
#或者这样:
$ git clone file:///opt/git/project.git


要添加一个本地仓库作为现有 Git 项目的远程仓库,可以这样做:

$ git remote add local_proj /opt/git/project.git


SSH 协议

通过 SSH 克隆一个 Git 仓库,你可以像下面这样给出 ssh:// 的 URL:

$ git clone ssh://user@server:project.git
#或者不指明某个协议 — 这时 Git 会默认使用 SSH :
$ git clone user@server:project.git


Git 协议

包含在 Git 软件包中的特殊守护进程; 它会监听一个提供类似于 SSH 服务的特定端口(9418),而无需任何授权。打算支持 Git 协议的仓库,需要先创建git-export-daemon-ok 文件 — 它是协议进程提供仓库服务的必要条件 — 但除此之外该服务没有什么安全措施。要么所有人都能克隆 Git 仓库,要么谁也不能。

Git 协议是现存最快的传输协议。如果你在提供一个有很大访问量的公共项目,或者一个不需要对读操作进行授权的庞大项目,架设一个 Git 守护进程来供应仓库是个不错的选择

HTTP/S 协议

HTTP 或 HTTPS 协议的优美之处在于架设的简便性。基本上,只需要把 Git 的裸仓库文件放在 HTTP 的根目录下,配置一个特定的post-update 挂钩(hook)就可以搞定。此后,每个能访问 Git 仓库所在服务器上 web 服务的人都可以进行克隆操作。下面的操作可以允许通过 HTTP 对仓库进行读取:

$ cd /var/www/htdocs/
$ git clone --bare /path/to/git_project gitproject.git
$ cd gitproject.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update


这样就可以了。Git 附带的 post-update 挂钩会默认运行合适的命令(git update-server-info)来确保通过 HTTP 的获取和克隆正常工作。这条命令在你用 SSH 向仓库推送内容时运行;之后,其他人就可以用下面的命令来克隆仓库:

$ git clone http://example.com/gitproject.git[/code] 
转载请务必保留此出处:http://blog.csdn.net/fgf00/article/details/51179681
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: