Git基础知识(九)
一个远程仓库通常只是一个裸仓库
: 一个没有当前工作目录
的仓库。
简单的说,裸仓库就是你工程目录内的 .git
子目录内容,不包含其他资料。
协议
使用本地的一个文件夹当作仓库的时候,将它使用文件共享给其他人。
1 | git clone /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 | 1 |
优点:
通过 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 | ssh zx@123.56.13.233 |
由于我大部分时间都是使用的HTTP来进行Git操作,所以SSH相关内容就不画蛇添足了。
有很多优秀的代码托管平台可以选择:https://git.wiki.kernel.org/index.php/GitHosting