面向工资编程,面向面试学习!

获取 Git 仓库

有两种取得 Git 项目仓库的方法。 第一种是在项目根目录下初始化 Git 仓库; 第二种是从一个服务器克隆一个现有的 Git 仓库。

在现有目录中初始化仓库

Git 使用git init命令初始化 Git 仓库,我们可以创建一个 git_tutorial 目录,使用 git init 命令初始化,后续你可以把 git 教程里面的例子添加到这个项目中来追踪:

mkdir git_tutorial
cd git_tutorial
git init

git init 命令将在当前目录下创建一个名为 .git 的隐藏目录,该目录含有 Git 仓库文件。 git init 命令只初始化了 Git 仓库,目录下面的文件还没有被跟踪。
如果当前目录不是空文件夹, 你可通过 git add 命令来添加文件的进行跟踪,然后执行 git commit 提交。我们在 git_tutorial 目录下创建几个文件,并把它们加入到 git 仓库中。

echo "hello git">index.html
echo "# 盘古教程(panku.pro)Git Tutorial
我的 git 学习笔记
">README.md
git add index.html README.md
git commit -m "first commit"

上面的命令将目录下 index.html、README.md 文件提交到仓库中。

克隆现有的仓库

Git 使用 git clone 命令获得已经存在的 git 仓库的拷贝,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,而不仅仅是复制文件需要文件。
克隆仓库的命令格式是 git clone ,参数说明:repo:Git 仓库;directory:本地目录。 比如,要克隆 Github 上面的 Flask 框架,可以用下面的命令:

git clone https://github.com/pallets/flask.git

这会在当前目录下创建一个名为 “flask” 的目录,并在这个目录下创建一个 .git 文件夹,从远程仓库拉取所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。如果你想在克隆远程仓库的时候,自定义本地仓库文件夹的名字,你可以使用如下命令:

git clone https://github.com/pallets/flask.git myflask # https协议

Git 支持多种数据传输协议,我们不仅可以使用 HTTP(s) 协议(https://),还可以使用 git 协议(git://),SSH(Secure Shell) 传输协议(user@server:path/to/repo.git),或者本地协议(Local),比如 。

git clone git://github.com/pallets/flask.git git_flask # git协议
git clone git@github.com:pallets/flask.git SSH_flask # SSH协议
git clone ~/Documents/flask.git local_flask # 本地协议

git clone使用https和ssh协议的区别

git可以使用四种主要的协议来传输资料: 本地协议(Local),HTTP(S) 协议,SSH(Secure Shell)协议及 git 协议。其中,本地协议由于目前大都是进行远程开发和共享代码所以一般不常用,而git协议由于缺乏授权机制且较难架设所以也不常用。
最常用的便是SSH和HTTP(S)协议。

HTTPS优缺点

  • 优点1: 相比 SSH 协议,可以使用用户名/密码授权,这样用户就不用必须在使用 Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。 对非资深的使用者,或者系统上缺少 SSH 相关程序的使用者,HTTP 协议的可用性是主要的优势。 与 SSH 协议类似,HTTP 协议也非常快和高效

  • 优点2: 企业防火墙一般会打开 80 和 443 这两个常见的http和https协议的端口,使用http和https的协议在架设了防火墙的企业里面就可以绕过安全限制正常使用git,非常方便

  • 缺点: 使用http/https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令. 但是现在操作系统或者其他git工具都提供了 keychain 的功能,可以把你的账户密码记录在系统里,例如OSX 的 Keychain 或者 Windows 的凭证管理器。

SSH优缺点

  • 优点1: 架设 Git 服务器时常用 SSH 协议作为传输协议。 因为大多数环境下已经支持通过 SSH 访问 —— 即时没有也比较很容易架设。 SSH 协议也是一个验证授权的网络协议;并且,因为其普遍性,架设和使用都很容易。

  • 缺点1: SSH服务端一般使用22端口,企业防火墙可能没有打开这个端口。

  • 缺点2: SSH 协议的缺点在于你不能通过他实现匿名访问。 即便只要读取数据,使用者也要有通过 SSH 访问你的主机的权限,这使得 SSH 协议不利于开源的项目。 如果你只在公司网络使用,SSH 协议可能是你唯一要用到的协议。 如果你要同时提供匿名只读访问和 SSH 协议,那么你除了为自己推送架设 SSH 服务以外,还得架设一个可以让其他人访问的服务。

总结

HTTPS利于匿名访问,适合开源项目可以方便被别人克隆和读取(但他没有push权限);毕竟为了克隆别人一个仓库学习一下你就要生成个ssh-key折腾一番还是比较麻烦,所以github除了支持ssh协议必然提供了https协议的支持。
而SSH协议使用公钥认证比较适合内部项目。 当然了现在的代码管理平台例如github、gitliab,两种协议都是支持的,基本上看自己喜好和需求来选择就可以了。