一、Git 与 GitHub 的历史
你来了,快坐下,今天我们来讲讲编程界的两大神器: Git 和 Github。
Git 和 Github 都是程序员每天都要用到的东西 —— 前者是目前最先进的 版本控制工具,拥有最多的用户,且管理着地球上最庞大的代码仓库;而后者是全球最大 同性交友 代码托管平台、开源社区。
如果你之前没接触过「版本控制」的概念,看到这里一定是一脸 xx 的,别急,看了这篇文章你一定能明白:
简单复述一下文章中的例子:
大四毕业生 小张 在写 毕业论文,他经常删删改改,有时还会后悔“昨天那个思路那么好,我怎么就给删了”……
有了多次教训后,他决定每次写之前都先复制一份,在复制的那份里修改,这么一来,文件夹里有了:
毕业论文_初稿.doc
毕业论文_修改1.doc
毕业论文_修改2.doc
毕业论文_修改3.doc
毕业论文_完整版1.doc
毕业论文_完整版2.doc
毕业论文_完整版3.doc
毕业论文_最终版1.doc
毕业论文_最终版2.doc
毕业论文_确定版1.doc
毕业论文_确定版2.doc
……
小张想:“虽然很痛苦,但不至于丢掉以前的灵感了吧……等等,最终版和确定版哪个是昨天写的来着???”
同时,他还要把论文发给学霸女友求帮忙,第二天他的文件夹里又有了:
毕业论文_最终版3.doc
毕业论文_女友版1.doc
毕业论文_女友版2.doc
几星期的煎熬下来,文件夹里多了几十份文件,小张的论文也快成型了,是时候把自己和女朋友的内容合并起来了。
这时又发生了一件喜闻乐见的事:U 盘中病毒了,而电脑里只有 1 个月前的版本……
如何拯救生无可恋的小张?其实,如果小张一早知道用「版本控制」工具就好了,他的文件可以整整齐齐地排列,就像这样:
“哎呀,早知道能这样,就不用手动控制那么多版本啦!”
但这还不够,如果能有一个支持「论文托管 + 论文版本控制」的网站就更好了。这样一来,小张不但能和女朋友合作编辑内容,还不用担心因电脑故障,导致之前论文版本的丢失。
这时 —— 论文Hub 出现了,它可以帮你托管论文,而且和版本控制工具无缝连接。
越来越多人发现了 论文Hub 的好处,相继把论文托管在论文 Hub 上 ,网站上的论文越来越多。一些优秀的作者还会把论文开源出来,让每个人都可以查阅、交流、学习……
慢慢的,论文 Hub 变成了全球最大的「交友社区」,并逐渐演化成了一种时尚 —— 找工作时,面试官会先问你有没有 论文 hub 的账号,有多少个赞、多少粉丝;而有优秀作品的人,会被大公司争抢录用……
这个 论文 hub,就是我们今天要学习的 Github ,只不过论文换成了程序代码。Github 大概长这样:
在没有这两个工具时,编程可能是这样的:
- 哪个同事修改了我的代码🔪我要杀了他
- 我把自己的代码改崩溃了🙂️我选择自杀
- 电脑崩溃、硬盘损坏、中毒,几万行代码找不到了😱
但有了他们,一切都不一样了:
- 同步代码到网络仓库,在家里写好代码上传,回到公司就可以继续写了,而且不怕丢失。
- 记录每次代码的修改,即使把程序写崩了,也能即使回溯到上一个版本。这在产品更新时也经常使用。
- 可以多人协作完成项目,每个人的提交都有清晰的记录。
你也会不断用到 Git 和 Github,把你完成的项目、学习记录,同步在 Github 的仓库中。这样做的结果是:你将有一份 非常漂亮的 Github 主页,能给你的简历加分很多。
Linux 之父 林纳斯(Linus) 在 1991 年创建了开源的 Linux 系统,随着 Linux 代码量越来越大,合并志愿者提交的代码已经无法依靠人工完成,所以 林纳斯 选择了商业的管理软件 BitKeeper ,来管理 Linux 的代码版本。
在 2005 年,BitKeeper 公司发现,有 Linux 社区的人试图破解 BitKeeper 软件,他们决定收回 Linux 社区的免费使用权。林纳斯 对此事调解数周无果,决定自己搞一个。他花了十天时间用 C 语言写好了一个开源的版本控制系统,就是著名的 Git。
(先写出一个操作系统,再用 10 天写出 Git,林纳斯已经不能用大神来形容,只能理解为外星人来技术扶贫的)
2007 年,旧金山的三个年轻人觉得 Git 是个好东西,创建一个公司名字叫 GitHub,第二年上线了使用 Ruby 编写的同名网站。这是一个基于 Git 的免费代码托管网站(有付费服务),十年间迅速蹿红,击败了实力雄厚的 Google Code,成为全世界最受欢迎的代码托管网站。根据 2018 年 10 月的 GitHub 年度报告显示,目前有 3100 万开发者创建了 9600 万个项目仓库,有 210 万企业入驻。
值得一提的是,GitHub 的 创始人、CEO —— Wanstrath 是一位大学肄业,自学成才的程序员。而他大学的专业是英语,相当于我们的“汉语言文学”专业,是一名地地道道的 “文科生” ,如今,他的身家可能超过了10亿美元,也算是一位自学编程成才的标志人物吧。
二、我们如何用 Git
来控制本地目录demo?
在demo目录中右键点击 git bash here打开git命令窗口,在命令行内输入 git init
即可。
git init
![](https://img.haomeiwen.com/i2287013/60a35eb761f6f581.png)
这是 Git
的初始化操作,作用是将一个已存在文件夹,置于 Git 的控制管理之下。
再 ls -la
命令,会发现一个名叫 .git 的目录被创建了,这意味着仓库初始化成功。可以进入到 .git 目录查看下有哪些内容。
![](https://img.haomeiwen.com/i2287013/85ba34677f24e6a3.png)
Git 提交代码的基本流程是这样的:
- 创建或修改 本地文件
- 使用 git add 命令,将创建或修改的文件添加到本地的 暂存区,这里保存的是你的临时更改
- 使用 git commit 命令,提交文件到 本地仓库
- 使用 git push命令,将本地代码库同步到 远端仓库
目前为止,我们实现了第一步,创建了一个文件,我们的最终目标是:将本地的 demo 仓库,同步到 GitHub 上的 demo 仓库中。
💡 git add
使用 git add + 文件名/目录名
命令,可以将你需要同步的文件,添加到本地的暂存区。我们先进入 demo 目录,然后把 README.md 文件添加一下:
$ git add README.md
输入 git status
,可以检测当前目录和暂存区的状态,查看哪些修改被暂存了:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
可以看到我们刚刚 add
的文件已经被初始提交了。
💡 git commit
git commit
提交是你工作的一个里程碑 —— 每当你完成一些工作,都可以创建一次提交,保存当前的版本。
这样一来,无论你何时修改了文件,都创建一个新版本的文件,你可以很方便地查看以往所有版本的文件和内容。
在提交之前,你必须先设置你的名字和 email,这是你在提交 commit 时的签名,每次提交记录里都会包含这些信息。
使用 git config 命令进行配置:
$ git config --global user.name "YourName"
$ git config --global user.email "YourEmail@xxx.com"
完成配置后,我们可以创建提交了,请输入:
git commit -m "first commit"
commit
的语法结构是 git commit -m "注释"
,通过上个命令,你创建了一条注释为 “first commit” 的 Git 提交。
$ git commit -m "fisrt commit"
[master (root-commit) d1202f9] fisrt commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
⚠️ 注意:每次提交,您都必须用 -m + '注释'
编辑注释信息 。它不仅能协助您辨别不同的版本,而且能让你理解,自己当时对文件做了什么修改。
比如当你每次在文件中添加了新的代码后,你可以写一句提交信息:“添加了 XXX 代码” —— 当你一个月后回来看提交记录或者 Git 日志 时,你还能知道当时做了什么。
三、与 Github 仓库同步
终于到了激动人心的时刻,我们要把本地仓库提交到远端仓库(即 Github 仓库)中。
💡 连接 Github 仓库
使用如下命令,将本地仓库连接到 GitHub 仓库中:
git remote add origin 仓库链接
仓库链接请在这里复制,并用剪切板功能粘贴进去:
!![](https://img.haomeiwen.com/i2287013/88fd5685f8c75dd2.png)
我们分析一下这个命令,首先 remote 的意思是远程:
add
很容易明白 —— 添加。git remote add
表示通知 Git 去添加一个远程仓库,后面接上的 origin
是这个仓库的小名,方便以后沟通,通常默认用 origin
来表示;最后再接上远程仓库的地址,即你刚刚创建的 Github 仓库链接。
💡 push 命令
push
顾名思义,就是推送, 使用 push
可以把本地仓库推送到远端仓库中。
具体命令如下:
git push origin master
执行后,GitHub服务器 需要验证你的身份,按提示输入你的用户名和密码即可完成 push 同步。
⚠️ 注意:在Linux 中输入密码是不可见的,输完后直接按回车键即可。
CBI-IT-05@DESKTOP-5HSUPIA MINGW64 /d/project/demo (master)
$ git remote add origin https://github.com/cfe/demo.git
CBI-IT-05@DESKTOP-5HSUPIA MINGW64 /d/project/demo (master)
$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 211 bytes | 211.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/cfe/demo.git
* [new branch] master -> master
CBI-IT-05@DESKTOP-5HSUPIA MINGW64 /d/project/demo (master)
$gti
接下来就是见证奇迹的时刻 —— 再刷新你的 Github 仓库,就会发现多了这些东西:
!![](https://img.haomeiwen.com/i2287013/3299fd8624a1cbdb.png)
💡分支的概念:分支在多人协作中经常会被用到,但前期我们用不到这个功能,为了不给你增加认知负担,这里就先不讲了。你只需知道 Git 管理的项目进程中,有一条默认的主分支 - master
即可。(想象 Git 是一棵树,master
就是树干,树干上还可以生出很多分支来,如 master 2.0、master 3.0 等)
四、克隆 GitHub 上的仓库
本节实验最后一个知识点是 git clone
命令,它可以帮你拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。
如果你想要复制一个项目,看看代码,或者把自己的远程仓库复制到本地,可以执行命令:
git clone [url]
[url] 指的就是你想复制的仓库,我们在 github.com
上提供了一个名字为 gitproject
的公开仓库, 供大家测试,现在你要把这个仓库复制到实验环境中,只需输入:
$ git clone https://github.com/cfe/demo.git
网友评论