目录
git 的历史
git 的感性认识
git 在Linux下的操作
git三板斧
git 的历史
雷纳斯托瓦兹,想必大家对这个名字并不陌生,他是Linux内核的最早作者,随后发起了这个开源项目,担任Linux内核的首要架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。而git这个广泛用于全球的版本控制系统也是他的作品。
当雷纳斯托瓦兹开发了Linux之后,因为Linux是开源项目,他每天会收到大量来自世界各地的由高级程序员发来的关于Linux的改进代码,而他需要对这些意见进行整合,将大量代码筛选合并,对Linux版本升级维护。
这个工作量可想而知,在这一过程中会有大量不同版本诞生,因此需要好好记录存储这些不同版本,此时就需要优质的版本控制器。雷纳斯托瓦兹找到一家公司希望能使用旗下的软件,但被告知要付费。Linux团队并不缺钱但是考虑到Linux本是开源项目,使用收费版本控制器违背了开源精神,并且不利于其他程序员加入团队。但后来该公司意识到Linux是可以改变世界的项目选择免费提供软件。
但好景不长,由于Linux社区一些程序员试图破解公司的版本控制器被发现,公司禁止Linux团队再使用该软件,于是雷纳斯托瓦兹花费数周写出了初代 git,并且也进行了开源。后 git发展越来越好,被商业化成了GitHub。而在国内,连接GitHub经常出问题,于是国内工程师也将git 包装了一下,就是gitee。
这里的GitHub和gitee,都是代码托管网站。不基于客户端,使用git工具对代码进行管理。
不仅限于Linux、也不仅仅是C\C++,各平台各语言的代码都可以托管。
git 的感性认识
上面说了git的发展历史,但目前只知道git是个版本控制器,以及GitHub和gitee是什么,接下来我举个例子从感性的角度带大家理解一下git。
大学里有一位化学老师,很负责很严谨,别的老师不会细看的学生写的实验报告他总是一字不拉的认真看。张三这天写了份报告上交,写的很烂,老师让他好好修改一下再交。于是张三改好了又来找老师,结果这次改得反而更烂,老师生气地指出了报告的错误内容,让他回去再改。第二天张三拿着报告给老师看,老师两眼一黑,写的还不如前面的。于是无奈的对张三说,你还是把第一份报告交给我吧,也不用改了。张三一拍脑门,他已经把前两份报告扔掉了。回去后张三和舍友李四说了此事,李四表示你为什么不早点找我,我每一次都提前把报告备份好,再交给老师,这就不怕了。
张三此时醒悟,给了李四十块钱托管费,日后所有报告的备份管理工作都交给了李四。李四也嗅到了商机,作为一名计算机学生,他写了一个版本控制器并制作了一个网页,可以管理登录用户的各种报告及文件。
这里一系列操作和git本质上是一样的,都是不用客户端,在浏览器网页上操作。用户将代码托管到gitee上,自动会进行版本管理,并提供历史版本获取和可视化服务。
git 在Linux下的操作
这里我在gitee上操作。首先创建仓库,创建完成后点击右上角的克隆\下载。
使用HTTPS路径,SSH需要密钥比较麻烦,HTTPS路上加密即可。
复制路径在Linux下克隆,使用 git clone 命令:
这样就将gitee的远端仓库同步到本地了。
这时本地就有一个仓库目录test,进入test里面是我历史提交的代码。
在gitee上我发现有个.gitignore在本地目录里没有,因为Linux下 .开头的文件都被隐藏了。
ls -al 找到该文件:
查看 .gitignore,发现里面都是些文件后缀:
ignore意思是忽略,以在该文件中出现的后缀 的文件不会推送到远端gitee上。
一般我们提交代码也都是只提交需要.c .cpp .java这种文件,像.txt .swf后缀的文件没必要提交,会占用很多空间,.gitignore文件会帮助我们减少不必要的推送文件。
还有一个隐藏文件.git,这其实就是本地仓库,.git文件里的内容+目录 = 本地仓库(git仓库)
所谓push到远端就是将.git文件里的内容同步到gitee上。
git三板斧
git的三板斧:add, commit, push
git add命令是将新创建的文件添加到本地仓库的临时区域 (注意:这里还未真正添加到仓库)
git commit -m '日志' : 提交,将刚刚add到临时区域的文件提交到本地仓库的.git目录下,也就是将新文件合并到本地仓库。注意这里提交日志不能乱写!
git push:这才是真正将新文件推送到远端仓库。
还有一个常用的git pull 命令,拉取。
当我们在远端修改代码并且提交时,如果本地仓库在也修改,会出现不匹配不同步的情况。这时可以在本地git pull一下,将远端的代码拉取下来同步了,再git push提交。
上面说提交日志不能乱写,因为都会记录在册,git log就能查看。