利用 SSH 完成 Git 与 GitHub 的绑定和文件提交

利用 SSH 完成 Git 与 GitHub 的绑定和文件提交




本文摘抄于知乎文章,仅用作学习记录,侵权删
原文链接:还不会使用 GitHub ? GitHub 教程来了!万字图文详解


利用 SSH 完成 Git 与 GitHub 的绑定


现在我们已经对 GitHub 有了一定的了解,包括创建仓库、拉分支,或者通过 Clone or download 克隆或者下载代码;我们也下载并安装了 Git,也了解了其常用的命令。

But,无论是 GitHub,还是 Git,我们都是单独或者说是独立操作的,并没有将两者绑定啊!也就是说,我们现在只能通过 GitHub 下载代码,并不能通过 Git 向 GitHub 提交代码。

因此,在本篇博文中,我们就一起完成 Git 和GitHub 的绑定,体验通过 Git 向 GitHub 提交代码的能力。不过在这之前,我们需要先了解 SSH(安全外壳协议),因为在 GitHub 上,一般都是通过 SSH 来授权的,而且大多数 Git 服务器也会选择使用 SSH 公钥来进行授权,所以想要向 GitHub 提交代码,首先就得在 GitHub 上添加 SSH key 配置。

第1步:生成 SSH key

我们想要生成 SSH key,首先就得先安装 SSH,对于 Linux 和 Mac 系统,其默认是安装 SSH 的,而对于 Windows 系统,其默认是不安装 SSH 的,不过有我们安装了 Git Bash,其也应该自带了 SSH,可以通过在 Git Bash 中输入 ssh 命令,查看本机是否安装 SSH:

在这里插入图片描述

如上图所示,此结果表示我们已经安装 SSH 啦!接下来,输入 ssh-keygen -t rsa 命令,表示我们指定 RSA 算法生成密钥,然后敲三次回车,期间不需要输入密码,之后就会生成两个文件,分别为 id_rsa(私钥) 和 id_rsa.pub(公钥)。对于这两个文件,其都为隐藏文件,默认生成在一下目录:

  • Linux 系统:~/.ssh

  • Mac 系统:~/.ssh

  • Windows 系统:C:\Documents and Settings\username\.ssh

  • Windows 10 ThinkPad:C:\Users\think.ssh

私钥和公钥生成之后,我们要做的事情就是把公钥 id_rsa.pub 的内容添加到 GitHub,这样我们本地的私钥 id_rsa 和 GitHub 上的公钥 id_rsa.pub 才可以进行匹配,授权成功后,就可以向 GitHub 提交代码啦!

第2步:GitHub 添加 SSH key

在这里插入图片描述

如上图所示,进入我们的 GitHub 主页,先点击右上角所示的倒三角图标,然后点击 Settings,进行页面设置,点击我们的头像亦可直接进入设置页面:

在这里插入图片描述

如上图所示,进入 Settings 页面后,再点击 SSH and GPG Keys 进入此子界面,然后点击 New SSH key 按钮:

在这里插入图片描述

如上图所示,我们只需要将公钥 id_rsa.pub 的内容粘贴到 Key 处的位置(Titles 的内容不填写也没有事),然后点击 Add SSH key 即可。

第3步:验证

在我们添加完 SSH Key 之后,也没有明确的通知告诉我们绑定成功啊!不过我们可以通过在 Git Bash 中输入以下命令进行测试:

ssh -T git@github.com

在这里插入图片描述

如上图所示,此结果即为 Git 与 GitHub 绑定成功的标志。


通过 Git 将代码提交到 GitHub

到这一步,我们已经完成了本地 Git 与远程 GitHub 的绑定,这意味着我们已经可以通过 Git 向 GitHub 提交代码啦!

但是在进行演示之前,我们需要先了解两个命令,也是我们在将来需要经常用到的两个命令,分别为 push 和 pull。

push:该单词直译过来就是 “推” 的意思,如果我们本地的代码有了更新,为了保持本地与远程的代码同步,我们就需要把本地的代码推到远程的仓库,代码示例:

git push origin master

pull:该单词直译过来就是 ”拉“ 的意思,如果我们远程仓库的代码有了更新,同样为了保持本地与远程的代码同步,我们就需要把远程的代码拉到本地,代码示例:

git pull origin master

此外,在之前我们讲到过 pull request,在这里,估计大家就能更好的理解了,它表示:如果我们 fork 了别人的项目(或者说代码),并对其进行了修改,想要把我们的代码合并到原始项目(或者原始代码)中,我们就需要提交一个 pull request,让原作者把我们的代码拉到 ta 的项目中,至少对 ta 来说,我们都是术语远程端的。

一般来说,我们在 push 操作之前都会先进行 pull 操作,这样不容易造成冲突。

提交代码

对于向远处仓库(GitHub)提交代码,我们可以细分为两种情况:

第一种:本地没有 Git 仓库,这时我们就可以直接将远程仓库 clone 到本地。通过 clone 命令创建的本地仓库,其本身就是一个 Git 仓库了,不用我们再进行 git init 初始化操作啦,而且自动关联远程仓库。我们只需要在这个仓库进行修改或者添加等操作,然后 commit 即可。

接下来,以博主的 GitHub 账号中的 aiimooc_tangpan 项目进行演示。

首先,进入 GitHub 个人主页:

在这里插入图片描述

如上图所示,点击 aiimooc_tangpan 项目:

在这里插入图片描述

如上图所示,进入 aiimooc_tangpan 项目后,点击 clone,复制上图所示的 HTTPs 地址链接。然后,进入我们准备存储 Git 仓库的目录,例如下面我新建的 GitRepo 目录,从此目录进入 Git Bash:

在这里插入图片描述

接下来,输入以下命令:

git clone https://github.com/tangpan360/aiimooc_tangpan.git

其中 clone 后面所接的链接为我们刚刚复制的远程仓库的地址:

在这里插入图片描述

如上图所示,我们已经把远程的 aiimooc_tangpan 仓库 clone 到本地啦!下面,我们看看 clone 到本地的仓库内容与远程仓库的内容,是否完全一致:

在这里插入图片描述

如上图所示,显示我们已经把远程仓库 ShareX 的内容都 clone 到本地啦!接下来,为了方便演示,我们直接把另一个 113_index.html 网页文件复制过来:

在这里插入图片描述

如上图所示,我们已经把 113_index.html 文件复制过来啦!接下来,从此项目进入 Git Bash,然后输入 git status 命令查看仓库状态:

在这里插入图片描述

如上图所示,aiimooc_tangpan 已经是一个 Git 仓库了,而且在输入 git status 命令后显示有一个文件未被追踪,也就是我们刚刚复制过来的一个文件没有提交。通过 【Git 初体验及其常用命令介绍】,我们已经知道了在真正提交代码之前,需要先进行 git add 操作:

在这里插入图片描述

如上图所示,我们已经将 113_index.html 文件 add 并 commit 到 aiimooc_tangpan 仓库啦!接下来,我们将 113_index.html 文件提交到仓库,然后输入 git log 命令查看仓库日志:

在这里插入图片描述

再输入 git status 命令查看仓库状态:

在这里插入图片描述

如上图所示,我们已经将 aiimooc_tangpan 仓库里面新添加的两个目录都提交啦!下面,我们将本地仓库的内容 push 到远程仓库,输入 git push origin main 命令:

在这里插入图片描述

如上图所示,在第一次向远程仓库提交代码的时候,需要输入账号及密码进行验证,验证成功后,显示结果如下:

在这里插入图片描述

然后,刷新 GitHub 中 aiimooc_tangpan 仓库:

在这里插入图片描述

如上图所示,我们已经将项目(仓库)中新添加的内容提交到了远程仓库。接下来,返回 GitHub 个人主页:

在这里插入图片描述

观察上图,我们会发现一个现象,那就是:aiimooc_tangpan 仓库的概要中新增加了一个 HTML 语言的标记。对于这个仓库语言的标记,其来源有两个,一是再我们创建仓库时就指定语言;二是在我们提交或者新建代码后由 GitHub 自动识别该语言。

以上介绍了向 GitHub 提交代码时的第一种情况,即:

第一种:本地没有 Git 仓库,这时我们可以直接将远程仓库 clone 到本地。通过 clone 命令创建的本地仓库,其本身就是一个 Git 仓库了,不用我们再进行 init 初始化操作啦,而且自动关联远程仓库。我们只需要在这个仓库进行修改或者添加等操作,然后 commit 即可。

接下来,我们继续介绍向 GitHub 提交代码时可能遇到的第二种情况,即:

第二种:本地有 Git 仓库,并且我们已经进行了多次 commit 操作。

仍然以博主的开源项目为例,不过这次换成 yolo-tutorial 项目进行演示。首先,建立一个本地仓库,命名为 yolo-tutorial:

在这里插入图片描述

如上图所示,进入该仓库,使用进行 init 初始化操作,代码如下:

git init

在这里插入图片描述

然后输入命令:

git remote add origin https://github.com/tangpan360/yolo-tutorial.git

利用上述命令关联远程仓库(在此,默认大家都知道如何获取远程仓库的地址),其中 origin 为远程仓库的名字:

在这里插入图片描述

将本地分支由 master 变成 main,代码如下:

git checkout -b main

在这里插入图片描述

由于一些众所周知的原因,GitHub 上传代码的默认分支由 master 变成了 main。但本地分支仍旧为 master,这就导致上传之后仓库有两个分支,还得手动合并,很麻烦。不如直接把本地的分支也修改为 main:

  1. git checkout -b main 新建main分支,并转至 main 分支
  2. git merge master 合并两个分支
  3. 然后就可以进行 add,commit
  4. git push origin main,将本地 main 分支 推送至远程 github 仓库

输入以下命令来同步远程仓库和本地仓库:

git pull origin main

再回到本地 yolo-tutorial 仓库,看看我们是否已经把远程仓库的内容同步到了本地:

在这里插入图片描述

如上图所示,显然我们已经把远程 yolo-tutorial 仓库里面仅有的 README.md 文件同步到了本地仓库。接下来,在本地仓库新建一个名为 test.txt 的测试文件:

在这里插入图片描述

输入 git add 和 git commit 命令,将文件 test.txt 添加并提交到 yolo-tutorial 仓库:

在这里插入图片描述

再输入 git push origin main 命令,将本地仓库修改(或者添加)的内容提交到远程仓库:

在这里插入图片描述

如上图所示,我们已经将本地仓库的内容同步到了远程仓库。下面我们进入远程 yolo-tutorial 仓库的页面,看看我们提交的结果:

在这里插入图片描述

如上图所示,我们已经将【通过 Git 将代码提交到 GitHub】的第二种情况演示完毕。

此外,在这个例子中,我们将远程仓库命名为 origin,本地仓库名为 yolo-tutorial,其实两者的名字可以随意取,一般来说,我们习惯性将远程仓库命名为 origin,不过在需要关联多个远程仓库的时候,就需要我们再取别的名字啦!

最后,再强调一遍:在我们向远程仓库提交代码的时候,一定要先进行 pull 操作,再进行 push 操作,防止本地仓库与远程仓库不同导致冲突的问题,尤其是第二种提交代码的情况,很容易就出现问题。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值