Git基础知识(九)

Git基础知识(九)

一个远程仓库通常只是一个裸仓库: 一个没有当前工作目录的仓库。

简单的说,裸仓库就是你工程目录内的 .git 子目录内容,不包含其他资料。

协议

  • 本地协议
  • HTTP协议
  • SSH协议
  • Git协议

    本地协议

使用本地的一个文件夹当作仓库的时候,将它使用文件共享给其他人。

1
2
$ git clone /opt/git/project.git # 本机
$ git clone file:///opt/git/project.git #共享文件

增加一个本地版本到Git项目

1
$ git remote add local_proj /opt/git/project.git
  • 优点

简单,直接使用了现有的文件权限和网络访问权限。

  • 缺点

不方便从多个位置访问。

并不保护仓库避免意外的损坏,每一个用户都有“远程”目录的完整 shell 权限,没有方法可以 阻止他们修改或删除 Git 内部文件和损坏仓库。

HTTP协议

  • Git 1.6.6之前的HTTP协议是只读模式的,又称为「哑」HTTP协议。

  • Git 1.6.6之后的HTTP协议,又称「智能」HTTP协议。

可以使用 HTTP 协议的用户名/密码的基础 授权,免去设置 SSH 公钥。

相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用 Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。

SSH协议

SSH 协议也是一个验证授权的网络协议;

克隆的方法:

1
2
3
4
# 1
$ git clone ssh://user@server/project.git
# 2
$ git clone user@server:project.git

优点:

  • 通过 SSH 访问是安全的「 所有传输数据都要经过授权和加密。」

  • SSH 协议很高效,在传输前也会尽量压缩数据。

缺点:

  • 不能匿名访问(即使是只读数据)

Git协议

包含在 Git 里的一个特殊的守护进程。

它监听在一个特定的端口「9418」。

要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok 文 件 :它是 Git 协议守护进程为这个版本库提供服务的必要条件 「但是除此之外没有任何安全措施」。 要么谁都可以克隆这个版本库,要么谁也不能。 由于没有授权机制,一旦开放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据。

优点:最快

缺点:缺乏授权机制

搭建Git仓库

导出裸仓库

我们需要导出一个「不包含当前工作目录的仓库」

1
$ git clone --bare Git_study Git_study.git

导出裸仓库

把仓库放到服务器上

假设使用我的阿里云设备来当服务器

我在/home/zx路径下新建一个文件夹git_study

存放路径:/home/zx/git_study

1
$ scp -r Git_study.git zx@123.56.13.233://home/zx/git_study

上传至服务器

下面看一下阿里云上的内容

服务器侧

克隆内容

1
$ git clone zx@123.56.13.233:/home/zx/git_study/Git_study.git

普通克隆

也可以将这个仓库进行修改,使其拥有推送权限

运行 git init 命令,并加上 --shared 选项,那么 Git 会自动修改该仓库目录的组权限 为可写。

1
2
3
4
$ ssh zx@123.56.13.233
$ cd /home/zx/git_study/Git_study.git
$ git init --bare --shared
# Reinitialized existing shared Git repository in /home/zx/git_study/Git_study.git/

增加权限

由于我大部分时间都是使用的HTTP来进行Git操作,所以SSH相关内容就不画蛇添足了。

有很多优秀的代码托管平台可以选择:https://git.wiki.kernel.org/index.php/GitHosting

代码托管

 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
您的支持将鼓励我继续创作!