一个远程仓库通常只是一个裸仓库
: 一个没有当前工作目录
的仓库。
简单的说,裸仓库就是你工程目录内的 .git
子目录内容,不包含其他资料。
使用本地的一个文件夹当作仓库的时候,将它使用文件共享给其他人。
$ git clone /opt/git/project.git # 本机
$ git clone file:///opt/git/project.git #共享文件
增加一个本地版本到Git项目
$ git remote add local_proj /opt/git/project.git
简单,直接使用了现有的文件权限和网络访问权限。
不方便从多个位置访问。
并不保护仓库避免意外的损坏,每一个用户都有“远程”目录的完整 shell 权限,没有方法可以 阻止他们修改或删除 Git 内部文件和损坏仓库。
Git 1.6.6
之前的HTTP协议是只读模式
的,又称为「哑」HTTP协议。Git 1.6.6
之后的HTTP协议,又称「智能」HTTP协议。可以使用 HTTP 协议的用户名/密码的基础 授权,免去设置 SSH 公钥。
相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用 Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。
SSH 协议也是一个验证授权的网络协议;
克隆的方法:
# 1
$ git clone ssh://user@server/project.git
# 2
$ git clone user@server:project.git
优点:
高效
,在传输前也会尽量压缩数据。缺点:
包含在 Git 里的一个特殊的守护进程。
它监听在一个特定的端口「9418」。
要让版本库支持 Git 协议,需要先创建一个 git-daemon-export-ok
文 件 :它是 Git 协议守护进程为这个版本库提供服务的必要条件 「但是除此之外没有任何安全措施」。 要么谁都可以克隆这个版本库,要么谁也不能。 由于没有授权机制,一旦开放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据。
优点:最快
缺点:缺乏授权机制
我们需要导出一个「不包含当前工作目录的仓库」
$ git clone --bare Git_study Git_study.git
导出裸仓库
假设使用我的阿里云设备来当服务器
我在/home/zx路径下新建一个文件夹git_study
存放路径:/home/zx/git_study
$ scp -r Git_study.git zx@123.56.13.233://home/zx/git_study
上传至服务器
下面看一下阿里云上的内容
服务器侧
$ git clone zx@123.56.13.233:/home/zx/git_study/Git_study.git
普通克隆
也可以将这个仓库进行修改,使其拥有推送权限
。
运行 git init
命令,并加上 --shared
选项,那么 Git 会自动修改该仓库目录的组权限 为可写。
$ 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