文章目录
本人最近在重装系统后重新配置了 git,发现按着原来的教程步骤做有些地方却给我整不会了。在搜索引擎的帮助下,再加上自己对 git 知识的巩固,最终算是解决了自己遇到的问题。从 2021 年 下半年起,在 git 的使用上,某些地方略有改动,比如 用 https push时不再用密码验证而是改用 token 验证(这是由于 github 的改动,和 git 的版本无关),如果按着一些老教程可能会遇到一些新的坑(不过那些教程的大部分内容还是非常有帮助的)。所以我就基于自己的实践,总结了一篇全新版的怎么在 github 上提交代码的笔记。
对于小白来说,重点关注第一步,第二步以及第三步中的 SSH 提交方式就能第一次在 github 上提交内容了。
另外,突然发现我的 git 还是老版本,如果大家的版本中没有 master ,确认代之的是 main,那就把我的教程中的所有 master 改为 main (小白也许会疑惑这是啥,等到后面用 git 提交代码的时候就能明白啦)
第一步:注册 github
这个大家直接搜索github官网,在上面按步骤注册一个账号就好了。
第二步:下载、安装 git
进入git官网下载git,链接:https://git-scm.com/
因为我的电脑是Window10 系统,所以我就下了Windows版
安装注意事项:
基本是一路Next,其中有些需要勾选的部分,按照默认的也是可以的,如果你不放心,可以看看下面这些图(这些是安装git 2.31.1的截图,最新版本号会比这个高,不过基本操作差不多,如果有些默认的选项和我的图片上不一致,就用你自己电脑上的默认选项)
是否创建桌面快捷方式看个人喜好,一般来说使用git很少从桌面直接打开
后面还有一些步骤也跟着默认的配置就好了,这里就不把图发出来了(为大家节省流量)。咱们迅速进入下一步😀。
第三步:git 的使用
安装好git后,我们可以在桌面或者任意一个文件夹里按下鼠标右键,会发现有了 Git Bash Here 的选项
我们点击Git Bash Here,出现了一个黑框框。
我们待会儿就是通过这个像命令行一样的终端来使用git。当然大家终端里的那行字可能和我的不一样,前半串是你电脑的型号,后半串这取决于你在哪个路径打开git终端。我们可以在这个终端通过一些git的命令进行一些操作,和使用linux终端是非常相似的。在此之前,我们先简要了解一下什么是git。
git 简介
使用版本控制的好处
git是一款分布式版本控制工具。版本控制可以帮助我们查看文件修改的历史记录,以及不同的版本具体改在什么地方。因此我们可以很方便地管理不同版本的代码,甚至可以轻松地进行版本切换。
除了有利于个人的开发,版本控制对团队的协作也起到非常大的作用。比如我和别人合作写一个项目,我就可以通过版本控制工具浏览所有开发的历史记录,知道对方改动了什么地方,这有利于掌控整个项目的开发进度。
并且我们不用担心作了不必要的修改,或者因为需求变更作了多余的修改,因为我们可以轻易地复原之前正常的版本。
集中式版本控制
在分布式版本控制工具的诞生之前,集中式版本控制是比较常见的,例如SVN。对于集中式版本控制来说版本库(有一个仓库可以存放不同的版本)都是集中存放在一台中央服务器上,中央服务器保存所有文件的修订版本。而协同工作的人通过客户端连接这台服务器,取出最新的文件或提交更新。
这样做的好处是每个人可以在一定程度上看到项目中的其他人正在做些什么。管理员也可以轻松地掌控每个开发者的权限。
但是缺点是需要联网才可以操作,并且如果中央服务器单点故障,那么在服务器宕机的过程中,谁也无法提交更新,也就无法协同工作。
分布式版本控制
分布式版本控制系统根本没有“中央服务器”,每个人的电脑都可以成为一个完整的版本库。
优点是:
1)对于个人开发来说,不需要联网也能进行版本控制,因为版本库在本地,所以可以进行本地的修改。如果多人协作要怎么办?这时要借助一个远程库,比如A把本地的版本库提交到远程库,然后B从远程库把代码仓库拉取到自己的电脑上,修改后再提交,这个过程还是要联网的。但是相较于集中式版本控制,分布式版本控制至少可以实现本地的版本控制。
2)每个客户端保存的都是完整的项目。比如A换了新电脑,但是B的电脑有保存完整的代码,B就能把版本库推送给A.
git 的工作原理
以提交代码为例吧,要想把我们电脑里的代码提交到远程仓库(github就是一种远程仓库),需要经历以下的流程:
工作区 -> 暂存区 -> 本地库 -> 远程库
工作区:即本地文件夹,存放着我们写的代码。
暂存区:临时存储从工作区提交过来的操作。
本地库:记录对于文件的各种操作,记录着历史版本。
远程库:托管在网络端的仓库。
提交代码的 git 指令(重点)
注:使用指令时一定要注意空格的位置!!!
设置用户签名
首先我们得让 git 知道是谁在操作。所以我们得设置一下用户信息。
随便在一个位置打开 Git Bash 终端,分别输入以下命令:
1)git config --global user.name “github上注册的用户名”
2)git config --global user.email "github上注册的邮箱"
我们可以输入 git config --global user.name 和 git config --global user.email来检查我们设置的是否正确,有无拼写错误的情况。写错的话就重新输入设置签名的指令。
接下来就要准备提交代码了。
将代码提交至 github 有两种方式。一种是 Https,另一种是 SSH。
用 Https 提交每次都要输入用户名和密码,而 SSH 是种免密登录方式。本人两种方式都有尝试,感觉 SSH 还是更香一点🐶。Https 的话感觉坑还挺多的。所以这里先教大家如何用 SSH 提交。
SSH 提交
绑定 SSH 密钥
使用 SSH 提交要通过 SSH 密钥。我们要绑定 SSH 密钥链接本地和 github 远程库。
♥在 Git Bash 中 输入 ssh-keygen -t rsa -C "注册时用的邮箱地址" 得到密钥。
注意空格,手机版的CSDN可能不好看出空格,那就参考下面这张图:
ssh-keygen 是生成公钥和私钥的命令,-t 是指定哪一种加密算法,rsa 就是一种加密协议,-C 是一种描述,后面跟的是你在 github 上注册的邮箱。
输入这个指令后按下回车,之后终端里会跳出一些字,是让你确认一些东西的,只要一路回车就好了。最后跳出类似这个东西就是密钥创建成功了。
只要出现这个长方形的图像就行了,里面的内容可能每个人都不一样。(注:随着git版本的更新,可能输出的内容会和本文里的不一样,但是只要生成 SSH 的指令输对,一路回车就能操作成功)
然后在 本地 /.ssh/ 目录下找到 id_rsa.pub ,用记事本打开得到所需密钥。记住是 .pub后缀的文件,这里得到的是公钥,另一个文件存储的是私钥,是不能公开的。我这里是在 C 盘的目录找。
获取 SSH 密钥还有另一种方法:(和上面在本地文件夹查看的方法二选一)
我们在 Git Bash 中使用命令 cd ~/.ssh 进入到 ssh 目录下,然后输入命令:
cat id_rsa.pub 可以在终端中查看密钥。
我们需要把这个密钥复制下来,然后绑定到 github 官网中:
1)打开官网登录,注意你账号的邮箱必须和刚刚生成 SSH 密钥的邮箱是一样的。
2)如图所示,点击右上角的账号头像,打开 Settings
找到 SSH and CPG Keys,点击 New SSH key(我这里是之前就创建了一个)
然后把刚刚复制的密钥粘贴进去,Title 就是我们给密钥随便起个名字。
创建远程仓库
进入官网后点击右上角的”+“号,创建一个新仓库。
我这里创建了一个仓库叫做 NewGitTest,创建成功后就会跳转到如下的界面,包含仓库链接和一些新手引导指令:
接下来我们就可以用指令往 github 仓库里推送自己的代码了!
这里又分为克隆仓库的方式和远程添加的方式,咱们二选一即可。
克隆远程库
我们找一个目录用于存放我们的克隆库,在这个目录下打开 Git Bash (我是在电脑里创建一个名为 github_clone_workspace 的文件夹用于存放我的克隆库),输入以下指令:
git clone 自己仓库里的SSH链接
(链接就是以下这个)
如果仓库里已经有文件了,SSH链接就在这个地方(要先点击 Code):
注意,如果你的链接是以 https 开头,说明此时用的是 Https 的方式。我们要把它切换成 SSH。
Git Bash中:
这里在输入克隆命令后可能有的小伙伴在 Cloning into xxx下面出现一大堆文字,比如:
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
Are you sure you want to continue connecting (yes/no)?
注意:这里我们要手动输入 yes ,不能直接回车,否则会报 “Host key verification failed. fatal: Could not read from remote repository.”!(本人踩过的坑😟)
这时候我们的本地文件夹里生成这个克隆库了。
克隆过程其实做了 3 件事:
1)拉取远程库的内容
2)初始化仓库
3)为仓库创建别名
这个别名是什么东西呢?在此之前,github 上的 SSH/Https 链接标识了哪一个远程库,但是链接毕竟很长,给仓库起个别名是省事的。这里 git 会自动帮我们创一个别名,叫做 origin 。可以进入克隆好的仓库文件夹,打开 Git Bash 通过 git remote -v 查看:(我的路径后多了 NewGitTest,这是因为我已经进入到这个文件夹里了)
注意:我这张图里黄色的路径最后是一个蓝色的 (master) 。新版的 git 终端中路径后缀应该是用 main来代替 master
这时候仓库还是空的,我们给仓库添加一个文件吧!
打开这个文件夹,随便创建一个文件,我这里就直接创建一个文本文件了。
提交到暂存区
我们在当前文件夹打开 Git Bash,输入以下指令:
git add 你要想添加的文件名
这一步相当于把工作区中的代码提交到暂存区中。
add 之后我们可以用 git status 查看暂存区状态,绿色表示暂存区里已经有了我们要提交的文件。
如果我们后悔了,又不想传这个文件了该怎么办?
其实是可以从暂存区中撤回的,输入 git rm --cached 要撤回的文件 可以返回暂存区的文件。这时候再用 git status 查看状态发现变为了红色,这时我们可以重新 add 了。
提交到本地库和备注
使用命令:
git commit -m "备注信息"
(这种方式是将暂存区的所有文件提交到本地库,如果想指定文件,就在指令最后加文件名)
这时候再用 git status 查看状态就显示提交完成,不显示任何文件了。
此时已成功将文件提交至本地库。
注:提交至本地库后就不能撤回了。
提交至远程仓库
输入命令
git push -u origin master
origin是仓库的别名,master 代表主分支,我们默认是在主分支里提交。这里不加 -u 其实也可以 push
同样,如果你的 Git Bash 终端中路径后缀是 main 而不是 master ,你要改为:git push -u origin main (其实就是把 master 换成 main)
这个地方是 master 就还是用 git push -u origin master
如果是 main 就是用 git push -u origin main
完整的如下:
看到类似这张图的结果就说明上传成功了!
回到 github 查看一下
有了我们提交的文件, perfect !
然后以后我们在本地库更改、添加、删除文件后再次推送至远程库时,基本就是用这三个指令:
git add xxx
git commit -m "xxx"
git push -u origin master
总结
- 将本地生成的 SSH 密钥绑定到 github ,得到密钥的指令:
ssh-keygen -t rsa -C “注册时用的邮箱地址”
- github 上创建仓库,将远程库克隆到本地(用 SSH 链接)
使用指令:
git clone 自己仓库里的SSH链接
- 使用三件套实现提交:
git add xxx
git commit -m “备注信息”
git push -u origin master
远程添加(和克隆仓库提交法二选一)
我们手动创建一个文件夹作为本地库(与克隆仓库方式不同,克隆仓库是直接自动帮我们创建一个和 github 上仓库名相同的文件夹)
进入到文件夹中,打开 Git Bash
首先使用 git init 初始化仓库,这时我们会发现路径后面多了一个 (master)
tip: 如果以后我们看到想要操作的路径后缀没有 master(或 main),记得 git init 下
使用远程添加的方式必须初始化仓库。而克隆仓库会自动帮你初始化
因为此时我们不是用克隆的方式,本地是不知道和哪个远程库连接的,这时我们用这个指令:
git remote add origin 仓库的SSH链接
注:这个 origin 只是我们给后面一长串远程地址起的别名,你也可以起别的名字,但是之后 push 的时候原本 origin 的位置就改成你起的别名。
我们可以用 git remote -v 来查看仓库别名。在还未 remote add之前应该是空的。
现在关联成功了,我们就还是用三件套进行提交:
git add xxx
git commit -m "xxx"
git push -u origin master
Https 提交
Https 提交也是分为克隆仓库和远程添加两种方式,且步骤和 SSH 提交是一样的,只不过我们需要把 SSH 链接替换成 Https 链接,提交的时候需要输入账号密码
Https 提交中的坑
但是用 Https 提交感觉坑还是挺多的,首先个人感觉在连接的稳定性上可能不如 SSH,github 是个外国网站,有时候因为网络问题会一直 push 不成功,从而怀疑人生。
另外,划重点:
在2021年8月31日后 用 Https push 代码不再采用密码验证的方式。
第一次测试就翻车了… 这是因为网络的问题(SSH 还是香,一次就 push 成功了),我们再试亿次…
哦吼,成功了,这时候会跳出这个:
输入用户名,接下来输入密码:
输完后终端出现这句话:
不是,不是你让我输密码吗? 你是故意找茬是不是?🐶🐶🐶
好吧,简单翻译下,从 2021 年 8 月 13 日起,不能再用密码验证的方式,而是要用 token 验证的方式。
Token 验证
我们打开 github官网,打开 Settings -> Developer settings -> Personal access tokens
下面这步很重要:
里面有很多勾选项,第一项 repo 应该是要勾选的,否则后续真的会出现一些难以捉摸的报错😟
(比如可能会报 403 权限不足,之前我创建 token 时啥也不勾选,最后 push 时就一直报 403 错误。利用搜索引擎查找解决的方法,但是基本上在我电脑上不起作用,后来我新建一个 token ,把 repo 勾选上。后续就不报错了)
其实全勾选也暂时没啥问题,这里选项太多了,本人也还在琢磨中,选完后点击生成 token 就行了。
然后这时候我们会得到一长串字符串,这就是 token ,我们最好要把 token 保存到某一个地方,因为你第二次进入这个界面就不会显示 token 了。
之后我们用 Https 提交,在密码验证的地方就把 token 当作密码来校验。
已用 Https 连接的仓库转为用 SSH 提交
好吧, Https 提交好像确实比 SSH 提交繁琐一点。
那如果 github 上的一个仓库已经是用 Https 连接的话可以用 SSH 提交吗?
答案是可以的。
首先我们还是要确保 SSH 密钥已经和 github 绑定。
然后我们复制仓库的 SSH 链接,在 Git Bash 中做如下操作:
push 的时候我们把 SSH 链接放在原本别名的位置(原本是 origin,现在改为仓库的 SSH 链接,其实 SSH 就代表了仓库的名字,原理还是一样的)
这时候就瞬间提交成功,心情也一下子舒畅了。