1.简介与由来
GitHub可用于版本控制,简单来说,就是在码代码的过程中,对每一次的修改版本进行标记与数据备份,而后可对任一历史版本进行修改,在团队协作的时候这种功能显得尤为重要,若某一版本被同伴修改,发生错误,可直接回上一历史版本重新修改,省时省力。
与SVN不同在于,SVN采用增量式管理,也就是每次只保留修改的那一部分,那么修改的这部分与之前的版本加起来就是最新版本,git采用文件系统快照的形式。
可进行权限控制,比如:只读,只写,可读可写等。
说起Git的由来,要从Linux说起,Linux是由Linux社区里的大佬们与linus大神协作完成的,对Linux感兴趣的伙伴都可以将代码发给linus大神,一开始这些代码都由Linus大神手动合并,而至后来,系统越来越大,任务实在有点重,这时一家叫BitMover的公司出于人道主义精神提供了一个BitKeeper的商业软件,由于未开源,要求不能破解此软件代码,但是有个叫Andrew的大佬愣是光明正大地去破解,结果被BitMover的公司发现了,收回了此软件的使用权。这可怎么了得,Linus于是决定自己写一个分布式版本控制系统,也就是后来的Git,据说,只花了两周就写出了主程序。他有一句很有名的话:talk is cheap! show me you code!
2.结构
分为三个区:
工作区(码代码)—git add–>暂存区(临时存储)—git commit–>本地库(历史版本)
Git VS GitHub:
GitHub是Git的其中一个代码托管中心,托管中心是用于维护远程库的。
举个栗子:A,B分别有自己的本地库,A发起了一个项目,并在托管中心创建一个远程库,此时远程库为空,项目保存在本地库之后,将本地库中的数据push至远程库中,而B可将此远程库中的内容clone下来,但想编辑此项目,得先加入这个团队,而后push自己本地库的内容至此远程库,同时A可将远程库内容pull至自己的本地库。
还是这个栗子:另外一种情况,在这个基础上,想要外部人员C帮助完成项目,则需要先将A的远程库fork一份为C的远程库,而后C对自己的远程库及本地库进行操作,而后,C的远程库向A的远程库发出一份pull request的申请,而后A对此进行审核,审核通过后,再将C的远程库内容合并至A的远程库。
3.实战之git命令行操作
现在咱们开始实际操作。
3.1本地库初始化
- 命令:git init
- 作用效果:创建一个空的.git文件(一般来说,文件中以 . 开头的均为隐藏文件,需要命令 ll -lA 查看)
- 补充:
- 下载git------在电脑桌面或任意磁盘文件界面下右击--------点击git bash here
- 其他命令:
-
ll 查看当前文件夹下所有非隐藏文件
-
ll -lA 查看当前文件夹下所有隐藏文件
-
pwd 查看当前所在目录
-
cd 文件夹名/ 进入此文件夹查看
-
ls -l|less 管道操作,分屏查看
-
详情查看:Linux ll ls 详解.
-
3.2设置签名
分类 | 项目级别 | 系统用户级别 |
---|---|---|
优先级比较 | 较高 | 较低 |
定义 | 在本地库创建目录下有效 | 相当于是电脑用户名,在整个电脑系统中有效 |
命令 | git config user.name xxx(自定义) git config user.email xxxx(自定义) | git config --global user.name xxx(自定义) git config --global user.email xxxx(自定义) |
存储位置(查看方法) | .git/config文件中(cat .git/config) | .gitconfig文件中(cat ~/.gitconfig) |
注意事项:二者必设其一
3.3添加提交以及查看状态操作
- 在本地初始化时我们已经创建了一个空的.git 文件,在此文件的目录下,用git status 可查看当前状态,显示如下:
on brach master
No commit #此处是指在本地库中没有文件被提交
Nothing to commit #此处是指在暂存库中没有可以被提交的文件
-
那么用vim编辑器新建一个文件,命令:vim demo.txt 补充:vim编辑器的命令为: wq(指退出),set nu(显示行号)
-
此时再回到当前目录下,用git status命令查看工作区与暂存区状态,会发现demo.txt被标红,意思为:此文件未被管理,无法为其保存历史纪录等。
-
那么用git add命令将其加入暂存区:git add demo.txt;另外,将文件从暂存区撤离的命令为:git rm --cached demo.txt
-
再一次检测状态(git status),而后用git commit 命令将其从暂存区移入本地库,命令用法与git add一致。
-
此时界面跳入vim编辑器,用法见: vim操作命令大全
-
cat demo.txt 可查看文件内容
-
用vim demo.txt 打开文件并进行修改,而后再查看状态,此时modified demo.txt被标红,可知此文件是被修改的文件,界面上还有两条关于更新与撤销刚才的修改的提示命令。此时可以选择对此文件用git add进行追踪放置暂存区,也可以将其直接git commit 放入本地库。
-
若从暂存区将其放入本地库时,可用git commit -m “自定义编辑,如:my second operation” demo.txt
3.4查看历史版本操作
- git log 查看所有历史版本目录,HEAD指向当前版本,当版本较多超过一页时,b向上翻页,q退出。
- git log --pretty=oneline:将会以一行的形式显示所有历史版本。
- git log --oneline:在前者的基础上,只显示 [部分索引值] 。以及,只显示HEAD指向的当前版本及历史版本。
- git reflog:在前者的基础上,增加了HEAD@{n},其中n指要到达当前版本需要让HEAD指针移动的步数。会显示所有版本,被HEAD指向的当前及历史与更新版本。
- 查看历史版本具体内容有以下三种形式:
- 基于索引值:git reset --hard[部分索引值] 而后用cat demo.txt可查看此版本内容。
- 使用^符号:只可后退 git reset --hard HEAD^^^,此符号有几个表示后退几步,且之后只能查看到达的当前版本以及历史版本,再不可返回最新版本。
- 使用~符号:弥补了前者的复杂性,git reset --hard HEAD~n,指后退n步,同样的,只能后退。
- 补充:–soft VS --mixed VS --hard
- 第一个–soft参数是指仅仅在本地库移动HEAD指针。
- 第二个参数在前者的基础上还重置暂存区。
- 第三个参数在前者的基础上且重置工作区。–hard更常用。
未完待续……
注:学习自bilibili站。