基于SSH协议clone GitHub远端仓库到本地-git

经常逛 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

[objc] view plain copy

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

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

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

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

② 生成秘钥

[objc] view plain copy

  1. $ ssh-keygen -t rsa -C "[email protected]"

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

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

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

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

[objc] view plain copy

  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 两个秘钥文件。

[objc] view plain copy

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

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

GitHub

[objc] view plain copy

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

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

[objc] view plain copy

  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 代理:

[objc] view plain copy

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

为 SSH key 启用 SSH 代理

[objc] view plain copy

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

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

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

Mac 端 copy 操作:

[objc] view plain copy

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

Windows 端 copy 操作:

[objc] view plain copy

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

Linux 端操作:

[objc] view plain copy

  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`)

[objc] view plain copy

  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 是否配置成功

[objc] view plain copy

  1. $ ssh -T git@github.com

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

[objc] view plain copy

  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 的时候设置了密码,接下来就会提示你输入密码,如:

[objc] view plain copy

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

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

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

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

[objc] view plain copy

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

⑤ clone 远端仓库到本地吧 ~

[objc] view plain copy

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

然后看到如下命令行:

[objc] view plain copy

  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):

[objc] view plain copy

  1. $ git fetch origin Vayne

接着看到如下命令行:

[objc] view plain copy

  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 分支)

[objc] view plain copy

  1. git branch
  2. * master

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

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

[objc] view plain copy

  1. git checkout -b Vayne origin/Vayne

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

合并成功:

[objc] view plain copy

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

原文地址:https://www.cnblogs.com/weizaiyes/p/8543172.html

时间: 2024-07-31 11:02:34

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

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

1,安装Git所需依赖包 # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # yum install gcc perl-ExtUtils-MakeMaker 2,卸载CentOS自带的git # yum remove git 3,下载较新Git版本 # mkdir /usr/src/tools # cd /usr/src/tools # wget https://www.kernel.org/

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

目录 1. 前言 2. 把rpm包下载到本地 3. 配置nginx对外提供服务 4. 配置本地repo文件 5. 生成repodata信息 6. 检查及使用 7. 对管理机器上的仓库进行更新 参考资料 环境:VMware-Workstation-12-Pro,Windows-10,CentOS-7.5,Xshell5 1. 前言 如果我们的yum仓库需要多台机器共同使用,此时把yum仓库做成本地的,然后一台台scp推送过去比较麻烦,此时可以考虑搭建一个基于HTTP协议,供给内网其它机器使用的本地

Linux开启TCP 22端口(基于SSH协议)

SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议. 第一步 #查看本机是否安装SSH软件包 [[email protected] ~]# rpm -qa | grep ssh openssh-server-6.6.1p1-12.el7_1.x86_64 openssh-clients-6.6.1p1-1

基于ssh协议免密码的openwrt环境下数据传输及远程指令执行

这个名字起的简直是有点过于装X. 其实,问题很简单,一般情况下,openwrt运行在一些嵌入式平台或者路由器上,而这种平台往往没有太多的资源,如硬盘存储.但一些数据,如流量又只能捕获下来暂时存放于其上,日积月累,如果不把数据拷贝回来并删除openwrt上的,便会造成空间不足.当然在这个过程中,不可避免的要使用一些脚本,用到一些命令,那么,又如何远程执行命令呢. 首先,我用的openwrt是BARRIER BREAKER版本的,其他版本未经测试. 回到问题,怎么解决呢.当然,一种方法是nfs,不过

基于ssh协议传输文件例子

使用python模块:paramiko,optparse __author__ = 'Administrator'import paramikoimport sysfrom optparse import OptionParserimport osdef exit_code(code): os.system('pause') sys.exit(code)def uploadfile(localfile,ip): if not os.path.exists(localfile): print '%

Git : SSH 协议服务器

SSH协议语法格式 对于拥有 shell 登录权限的用户账号,可以用下面的语法访问 Git 版本库: 语法 1 : ssh://[<username>@]<server>[:<port>]/home/xxx/repo1.git语法 2 : [<username>@]<server>:/home/xxx/repo1.git 注意 : SSH 协议地址格式可以使用两种不同的写法,第一种是使用 ssh:// 开头的标准的 SSH 协议 URL 写法,第

GItHub 建立仓库克隆仓库

Linux环境 建立本地仓库 mkdir git cd git git init 获取仓库地址 找到你的仓库,Clone or download,复制 克隆仓库到本地 git clone https://github.io/xxx/xxx.git //还有一直ssh方式

[原]基于Telnet协议的Jenkins远程部署

最近奉命研究Jenkins的自动远程部署,刚开始进行还算顺利.但是,紧接着问题就来了,我们要部署的目标机器是Telnet协议的.而接触过jenkins的都知道,所有的插件里面只有用于本地部署的和基于SSH协议远程部署的,并没有一个是基于Telnet协议的.那么这该怎么解决呢? 当然,你也可以为你的目标机器安装SSH服务. 我先说说解决的思路,然后再附上具体的步骤和shell脚本. 思路:将jenkins安装在linux系统上 --->  SVN check out 部署的项目  --->  m

使用Telnet与ssh协议远程登录linux系统

一.计算机的登录 计算机终端设备通过输入用户账户标识和与之对应的口令的方式被计算机验证的过程. 终端的分类: 1)物理终端:计算机本身的控制台设备:通常将其标识为"pty",在现代计算机上,物理终端与早期的计算机上的物理终端的意义不一样了.在现在的linux系统上,物理终端设备被映射到/dev/console上,所有内核输出的信息都输出到console终端,除此之外,其他用户进程输出的信息一般都输出到虚拟终端或伪终端 2)虚拟终端:在现代的计算机中,通常将键盘+显示器组合称作"