经常逛 GitHub 的可能都知道,在 clone 远端仓库的时候,会有两个选项,如下图:

首先我们来说明一下两种方式的区别。

使用 HTTPS url 克隆对初学者来说会比较方便,复制HTTPS url 然后到 git Bash 里面直接用 clone 命令克隆到本地就好了,但是每次 fetch 和 push 代码都需要输入账号和密码,这也是HTTPS 方式的麻烦之处。而使用 SSH url 克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者或管理员。否则你是无法添加 SSH key 的,另外 SSH 默认是每次 fetch 和 push 代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行 fetch 和 push 也可以另外进行设置,但一般人不这么做。

以下对如何配置 SSH key 和 使用 SSH url 克隆作详细说明:(以下操作均在 Terminal 中进行)

① 查看自己是否已经创建了 SSH key

  1. $ cd ~/.ssh
  2. $ ls

这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么你可以跳过步骤 2,直接进入步骤 3。

如果没有 SSH key ,是不会存在该文件夹的。

如果不存在 SSH key,或是 SSH key 不可用,那么备份并删除该文件夹,重新生成 SSH key 。(进入步骤 2)

② 生成秘钥

  1. $ ssh-keygen -t rsa -C "CoderZYWang@yeah.net"

-t 指定密钥类型,默认是 rsa ,可以省略。

-C 设置注释文字,比如邮箱。(一定要是关联你 GitHub 的注册邮箱,也就是用户名)

-f 指定密钥文件存储文件名。

在上面的命令行中我省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如下:

  1. Generating public/private rsa key pair.
  2. Enter file in which to save the key (/Users/bpb/.ssh/id_rsa):

当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。

  1. /Users/bpb/.ssh/id_rsa already exists.
  2. Overwrite (y/n)? y<span style="font-size:14px;">
  3. </span>

接着又会提示你输入两次密码(该密码是你 push 文件的时候要输入的密码,而不是 GitHub 管理者的密码),

GitHub

  1. Enter passphrase (empty for no passphrase):
  2. Enter same passphrase again:

之后会显示如下提示,表示 SSH key 已经创建成功。

  1. Your identification has been saved in /Users/bpb/.ssh/id_rsa.
  2. Your public key has been saved in /Users/bpb/.ssh/id_rsa.pub.
  3. The key fingerprint is:
  4. SHA256:rxneWu2eUcd6M5DKFt2J9aeDZhxpNczajN89HRoqZZg CoderZYWang@yeah.net
  5. The key's randomart image is:
  6. +---[RSA 4096]----+
  7. |                 |
  8. |             o   |
  9. |              =. |
  10. |          o .B=oo|
  11. |        SE +**++=|
  12. |         .+++=+==|
  13. |        ..o=B.=+=|
  14. |       . *o+ o o+|
  15. |        =...+    |
  16. +----[SHA256]-----+

③ 添加 SSH key 到 GitHub 上去

确保启用 SSH 代理:

  1. $ eval "$(ssh-agent -s)"

为 SSH key 启用 SSH 代理

  1. $ ssh-add ~/.ssh/id_rsa

如果你使用一个现有的SSH密钥,而不是产生一个新的SSH密钥,您需要与您现有的私钥文件名命令取代 id_rsa。(当然使用旧密钥就不需要执行上面一行命令行)

拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用 git 命令复制该文件的内容,如下:

Mac 端 copy 操作:

  1. $ pbcopy < ~/.ssh/id_rsa.pub
  2. # Copies the contents of the id_rsa.pub file to your clipboard

Windows 端 copy 操作:

  1. $ clip < ~/.ssh/id_rsa.pub
  2. # Copies the contents of the id_rsa.pub file to your clipboard

Linux 端操作:

  1. sudo apt-get install xclip
  2. # Downloads and installs xclip. If you don't have `apt-get`, you might need to use another installer (like `yum`)
  1. xclip -sel clip < ~/.ssh/id_rsa.pub
  2. # Copies the contents of the id_rsa.pub file to your clipboard

登录你的github账号,从右上角的设置(Account Setting )进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key。

点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。当然,上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。默认的会使用你的邮件名称。如下图:

④ 测试你的 SSH key 是否配置成功

  1. $ ssh -T git@github.com

当你输入以上代码时,会有一段警告代码,如:

  1. The authenticity of host 'github.com (207.97.227.239)' can't be established.
  2. # RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
  3. # Are you sure you want to continue connecting (yes/no)?

这是正常的,你输入 yes 回车既可。如果你创建 SSH key 的时候设置了密码,接下来就会提示你输入密码,如:

  1. Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

当然如果你密码输错了,会再要求你输入,知道对了为止。

注意:输入密码时如果输错一个字就会不正确,使用删除键是无法更正的。

密码正确后你会看到下面这段话,如下:

  1. Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':

⑤ clone 远端仓库到本地吧 ~

  1. $ git clone git@github.com:kahowu/benpaobao_ios.git

然后看到如下命令行:

  1. Cloning into 'XXXXXXX'...
  2. remote: Counting objects: 5133, done.
  3. remote: Compressing objects: 100% (24/24), done.
  4. Receiving objects:  43% (2224/5133), 4.84 MiB | 1024 bytes/s
  5. remote: Total 5133 (delta 0), reused 0 (delta 0), pack-reused 5109
  6. Receiving objects: 100% (5133/5133), 26.98 MiB | 75.00 KiB/s, done.
  7. Resolving deltas: 100% (2922/2922), done.
  8. Checking connectivity... done.

然后切换到本地项目的根目录下,拉取远端仓库的分支(Vayne):

  1. $ git fetch origin Vayne

接着看到如下命令行:

  1. remote: Counting objects: 29, done.
  2. remote: Compressing objects: 100% (29/29), done.
  3. remote: Total 29 (delta 1), reused 0 (delta 0), pack-reused 0
  4. Unpacking objects: 100% (29/29), done.
  5. From github.com:kahowu/benpaobao_ios
  6. * branch            Vayne      -> FETCH_HEAD
  7. 74b0c3f..40beaf1  Vayne      -> origin/Vayne

查看本地已经存在的远端分支:(发现只有一个 master 分支)

  1. git branch
  2. * master

新建本地 Vayne 分支,然后把拉取下来的远端 Vayne 分支进行合并:

注意下列命令行,是相对于我们拉下来的 Vayne 远端分支作为基准进行创建的 Vayne 本地分支,也就是说创建出来的本地 Vayne 分支是和远端的 Vayne 分支的代码保持一致的。和普通创建本地分支有一些小小的差异。(一般我们创建的出来的本地分支是基于当前所在的本地分支进行创建的,在此处也就是 master。但是由于我们在后面拼接了 origin/Vayne ,所以说此处并不是基于 master 分支创建的 Vayne 分支)

  1. git checkout -b Vayne origin/Vayne

上面一句代码可以直接运行,不用 fetch,但是 fetch 的好处是可以先暂时拉取并查看。当然现在本地也没有 Vayne 分支,所以直接拉取也是合适的。

合并成功:

    1. Branch Vayne set up to track remote branch Vayne from origin.
    2. Switched to a new branch 'Vayne'

基于SSH协议clone GitHub远端仓库到本地-git的更多相关文章

  1. github git clone ssh协议 clone超慢解决方案,提高Github Clone速度

    即使进行了fq吧但是git clone ssh协议就是慢 2kb/s你能忍,坚决不能忍. github git clone ssh协议 clone超慢解决方案 151.101.72.249 globa ...

  2. Git - git clone - 将远端仓库克隆拷贝到本地

    索引: 目录索引 参看代码 GitHub: git.txt 一.示例: git clone https://github.com/liumeng0403/lm.solution.git 二.说明: 1 ...

  3. 搭建基于HTTP协议内网yum仓库

    目录 1. 前言 2. 把rpm包下载到本地 3. 配置nginx对外提供服务 4. 配置本地repo文件 5. 生成repodata信息 6. 检查及使用 7. 对管理机器上的仓库进行更新 参考资料 ...

  4. CentOS下搭建Git服务器(基于SSH协议)

    1,安装Git所需依赖包      # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel      # ...

  5. 基于SSH协议的端口转发

    [前言] 最近一直在使用ssh协议的端口转发(隧道)功能,完成对内网空透等.这篇文章将主要讲解3种常用的ssh tunnelling使用方法和基本原理. 在介绍具体内容前,我先奉上端口转发的常用情景: ...

  6. GitHub学习二-将本地Git库与Github上的Git库相关联

    0 git clone 如果是从自己的github clone,一键搞定,和三步的git remote add功能一样. 1.创建本地库 新建目录,右键git bash here,输入 git ini ...

  7. Linux(例如CentOS 7)打开TCP 22端口,基于SSH协议

    SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专 ...

  8. 「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库

    「BUAA OO Pre」Git生成多个ssh key并连接GitLab仓库 Part 0 前言 写作背景 笔者在配置学校GitLab的ssh key时遇到一些问题,原因应为曾经配置过GitHub的s ...

  9. Git_使用SSH密钥操作远端仓库

    git支持多种传输协议,ssh协议是其中一种. 初次使用git的用户要使用ssh协议大概需要三个步骤: 生成密钥 设置远程仓库(本文以github为例)上的公钥 把git的 remote url 修改 ...

随机推荐

  1. Linux 学习笔记之 --- select 与 poll 事件模型详解

      select 与 poll 工作原理:   1.select 主要是采用轮询的方式来实现对就绪的 fd 处理: 2.poll 和 select 基本相同,主要不同在于 poll 没有对 fd 数量 ...

  2. winform 如何正确的获取窗体的标题栏高度

    最近我需要知道鼠标在一个控件里的相对位置,鼠标相对于屏幕的位置我是可以知道的,所以只要得到控件相对于屏幕的位置,就可以算出鼠标相对于控件的位置了 但是发现有误差 后来经过测试是由于窗体的标题栏高度导致 ...

  3. 最长回文子串(Mirrored String II)

    Note: this is a harder version of Mirrored string I. The gorillas have recently discovered that the ...

  4. 成都国嵌-嵌入式linux必修实验手册…

    emouse收集整理,转载请注明: emouse的技术专栏 博客园:http://www.cnblogs.com/emouse/ CSDN:http://blog.csdn.net/haozi_198 ...

  5. MySQL分组条件,group by order by limit 顺序

    having 中如果没有用聚合函数(必须sum,min),涉及到的字段名称必须在select 中有对应字段名称才可以,用到聚合函数可以不必在select中有相应字段名称的 limit 2,3:2表示从 ...

  6. Linux服务器防火墙白名单设置

    公司最近对网络安全抓的比较严,要求防火墙必须开启,但是项目的服务器有五六台,三台用于负载均衡,服务器之间必须要进行各种连接,那就只能通过添加白名单的方式. 登上服务器,编辑防火墙配置文件 vi /et ...

  7. 521. Longest Uncommon Subsequence I 最长不同子数组

    [抄题]: [暴力解法]: 时间分析: 空间分析: [优化后]: 时间分析: 空间分析: [奇葩输出条件]: [奇葩corner case]: [思维问题]: [一句话思路]: 两个单词的话,就是看谁 ...

  8. 使用RVM更新Ruby 版本

    http://rvm.io/rvm/install Install RVM (development version): \curl -sSL https://get.rvm.io | bash Wi ...

  9. 洛谷P2569 [SCOI2010]股票交易

    P2569 [SCOI2010]股票交易 题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股 ...

  10. Yii2邮箱发送与配置

    1配置邮箱 在 common/config/web.php中写入以下代码配置 Mail代理 return [ 'components' => [ ...//your code, //以下是 ma ...