学会使用Git 和 GitHub
Git 和 GitHub 都是程序员每天都要用到的东西 —— 前者是目前最先进的 版本控制工具,拥有最多的用户,且管理着地球上最庞大的代码仓库;而后者是全球最大 同性交友 代码托管平台、开源社区。
在没有这两个工具时,编程可能是这样的:
- 哪个同事修改了我的代码 我要?了他
- 我把自己的代码改崩溃了 我选择自杀
- 电脑崩溃、硬盘损坏、中毒,几万行代码找不到了 ?
但有了他们,一切都不一样了:
- 同步代码到网络仓库,在家里写好代码上传,回到公司就可以继续写了,而且不怕丢失。
- 记录每次代码的修改,即使把程序写崩了,也能及时回溯到上一个版本,这在产品更新时也经常使用。
- 可以多人协作完成项目,每个人的提交都有清晰的记录。
在之后的学习中,你也会不断用到 Git 和 GitHub,把你完成的项目、学习记录,同步在 GitHub 的仓库中。这样做的结果是:你将有一份 非常漂亮的 GitHub 主页,能给你的简历加分很多。
接下来,我们将学习 Git 的基本操作,并注册 GitHub 账户,建立你的第一个代码仓库!
Git 与 GitHub 的历史
Linux 之父林纳斯(Linus) 在 1991 年创建了开源的 Linux 系统,随着 Linux 代码量越来越大,合并志愿者提交的代码已经无法依靠人工完成,所以 林纳斯 选择了商业的管理软件 BitKeeper ,来管理 Linux 的代码版本。
在 2005 年,BitKeeper 公司发现,有 Linux 社区的人试图破解 BitKeeper 软件,他们决定收回 Linux 社区的免费使用权。Linus 对此事调解数周无果,决定自己搞一个。他花了十天时间用 C 语言写好了一个开源的版本控制系统,就是著名的 Git。
(先写出一个操作系统,再用 10 天写出 Git,林纳斯已经不能用大神来形容,只能理解为外星人来技术扶贫的)
2007 年,旧金山的三个年轻人觉得 Git 是个好东西,创建一个公司名字叫 GitHub,第二年上线了使用 Ruby 编写的同名网站。这是一个基于 Git 的免费代码托管网站(有付费服务),十年间迅速蹿红,击败了实力雄厚的 Google Code,成为全世界最受欢迎的代码托管网站。根据 2018 年 10 月的 GitHub 年度报告显示,目前有 3100 万开发者创建了 9600 万个项目仓库,有 210 万企业入驻。
值得一提的是,GitHub 的创始人、CEO —— Wanstrath 是一位大学肄业,自学成才的程序员。
而他大学的专业是英语,相当于我们的“汉语言文学”专业,是一名地地道道的 “文科生”,如今,他的身家可能超过了 10 亿美元,也算是一位自学编程成才的标志人物吧。
Git 的安装
Git 是一个版本控制系统,可以理解为一个工具,使用之前必须得先下载安装,所以第一步必须要安装。
- Windows:GitForWindows
- Mac 系统安装:git-osx-installer
- Linux:在终端输入命令行安装
- Debian 系列:apt-get install git
- Fedora 上:yum install git-core
由于环境中预装了 Git,打开 终端 ,输入 git 可以检测是否安装成功:
如图,如果成功安装了 Git,会显示 Git 的常用命令,以后忘记命令时,也记得输入 git 查看一下~
在 GitHub 上创建仓库
下面,我们通过一次上传 GitHub 的完整操作,实践学习 Git 的常用功能。
首先,申请一个 GitHub 账户。
打开 GitHub,你可以在主页的 banner 上快速注册,或者点击右上角的 Sign up 注册。
下一步,我们选择创建一个免费账户。
下一步,回答两个问题,也可以在最下面选择跳过:
最后,去注册邮箱中接收验证邮件,验证后,自动用新注册账户登录,进入 GitHub 主页。
第二步,我们来新建一个代码仓库。
仓库( repository),可理解为储存代码的场所,点击个人主页的右上角的加号,再点击 New repository,即可创建新的仓库:
然后给仓库命名(比如说 Demo),然后点击 Create Repository,无需考虑本页面的其他选项。
创建后,页面跳转到新建仓库的主页面,第一步成功了!
添加 SSH 关联授权
2021 年 8 月 GitHub 不再允许使用账户密码操作 GitHub,必须使用 SSH 密钥登陆。
2022 年 3 月 15 日,GitHub 又通过删除较旧的不安全密钥类型提高了安全性。
接下来,我们可以在系统中创建 SSH 公私钥,并将公钥放到 GitHub 指定位置。如此操作即可生成 GitHub 账户对于当前系统中的 Git 授权。
在终端执行下面命令,每次询问按回车即可。
ssh-keygen -t ed25519-C "你的邮箱地址"
终端执行 ssh-keygen 命令按几次回车生成公私钥,公私钥存放在主目录下的隐藏目录 .ssh 中的两个文件中:
将 ~/.ssh/id_ed25519.pub 文件中的公钥内容复制出来,实验环境中可以使用右侧工具栏中的剪切板复制:
然后在 GitHub 网页上添加公钥:
Title 自定义,把剪切板中的内容粘贴到 Key 中,点击绿色按钮添加 SSH Key 即可:
使用 SSH 的好处主要有两点:
- 免密码推送,执行 git push 时不再需要输入用户名和密码了;
- 提高数据传输速度。它不是必须的,比如在课程中挑战环境是不可保存的,一次性的,这种环境就没有必要创建 SSH 了,因为相较好处来说,还是太麻烦了。
克隆 GitHub 上的仓库到本地
现在克隆前面我们在 GitHub 上创建的仓库,使用 git clone + [仓库地址] 命令即可,这是标准的克隆仓库命令。
回到仓库主目录,点击下图所示的绿色按钮,点击紫色框中的 “Use SSH”,然后复制这个链接。
重要的一点:只有使用这种 git 开头的地址克隆仓库,SSH 关联才会起作用。
在实验环境里删除原仓库,使用此链接重新克隆仓库。克隆仓库是需要确认连接,输入 yes 即可:
进入仓库主目录,如下图所示,仓库主目录中有个 .git 隐藏目录,它里面包含了仓库的全部信息,删掉这个目录,仓库就变成普通的目录了。进入到仓库目录中,命令行前缀发生了一些变化,出现了红色的 master ,它就是当前所在的分支名:
当我们在 GitHub 上创建一个仓库时,同时生成了仓库的默认主机名 origin,并创建了默认分支 master。GitHub 可以看成是免费的 Git 服务器,在 GitHub 上创建仓库,会自动生成一个仓库地址,主机就是指代这个仓库,主机名就等于这个仓库地址。克隆一个 GitHub 仓库(也叫远程仓库)到本地,本地仓库则会自动关联到这个远程仓库,执行 git remote -v 命令可以查看本地仓库所关联的远程仓库信息:
Git 要求对本地仓库关联的每个远程主机都必须指定一个主机名(默认为 origin),用于本地仓库识别自己关联的主机,git remote 命令就用于管理本地仓库所关联的主机,一个本地仓库可以关联任意多个主机(即远程仓库)。
克隆远程仓库到本地时,还可以使用 -o 选项修改主机名,在地址后面加上一个字段作为本地仓库的主目录名,举例如下:
另一个在其它 Git 教程中常见的命令 git init ,它会把当前所在目录变成一个本地仓库,因为有 GitHub 的存在,这个命令在我们的生产生活中用到的次数应该是零,除非你想费时费力自己搭建服务器。操作截图如下: