Git学习笔记
🚀 Git 简介
Git 是 Linus Torvalds 为了帮助管理 Linux 内核源码而开发的一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响。也因此其近乎所有的操作都是本地执行,所以在断网的情况下仍然可以提交代码,切换分支。Git 又使用了 SHA-1 哈希算法确保了在文件传输时变得不完整、磁盘损坏导致数据丢失时能立即察觉到。
workspace:工作区
staging area:暂存区/缓存区
blocal repository:本地仓库
remote repository:远程仓库
✈️ Git 的优点
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间可以很容易的解决冲突。
5、离线工作。
✈️ Git 的缺点
1、模式上比 SVN 更加复杂。
2、不符合常规思维。
3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
✈️ 小知识:Git 名字的由来
git 在英语俚语意思是蠢货,自以为是且好辩的人。以下是作者本人的话:
I’m an egotistical bastard, and I name all my projects after myself. First ‘Linux’, now ‘Git’.
我是个任性的杂种,我把所有我做的项目以我自己命名。先是’Linux’,这次是’Git’.
除此以外,还有一个解释。
2005年4月7日,Linus Torvalds 对 Git 的代码进行首次提交时,添加了一个名为 README 的文件。这个文件的第一段是这样写的:
GIT - the stupid content tracker
“git” can mean anything, depending on your mood.
random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of “get” may or may not be relevant.
stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
“global information tracker”: you’re in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
“goddamn idiotic truckload of sh*t”: when it breaks
This is a stupid (but extremely fast) directory content manager. It doesn’t do a whole lot, but what it does do is track directory contents efficiently.
从上面这段话中我们可以看出,Linus 对 Git 的含义做出了多种解释:
- 第一个原因可以看做是实用性的原因。一个三个字母的命令说起来快,打起来也容易。
- “Git “这个词没有被任何其他现有的Unix命令所使用。
- Git最初的工作版本的代码非常简单,功能很弱。
- 表示Global Information Tracker的缩写,如果能正常工作时。
- 表示Goddamn Idiotic Truckload of sh*t的首字母缩写,如果不能正常工作时。
🚀 Git 基本环境搭建
✈️ 初始化仓库
在想要创建本地仓库的目录下单击鼠标右键,选择 Git Bash Here ,在 git 终端 输入命令 git init
创建一个本地仓库。
此时会自动生成一个 master 分支,并在该目录下建立 .git 目录。
每个项目有且只有一个 .git 目录,为项目存储所有元数据和对象数据库,这些对象指向不同的分支。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。其内容释义如下:
- HEAD # 这个项目当前指向哪个分支
- config # 项目的配置信息, git config 命令会改动它
- description # 用来显示对仓库的描述信息
- hooks/ # 包含客户端或服务端的钩子脚本,在特定操作下自动执行
- index # 暂存区文件,是一个二进制文件
- logs/ # 保存日志信息
- objects/ # 存储所有数据内容,本地的版本库存放位置
- info # 信息文件夹. 包含一个全局性排除文件,可以配置文件忽略
- refs/ # 存储指向数据的提交对象的分支
==> 切记:不要手动去修改或删除 .git 文件夹中的内容。==
✈️ 生成 SSH Key
输入以下命令,即可创建 SSH Key
1 | ssh-keygen # 本地仓库生成 SSH Key |
将生成的 Key 复制,绑定到 Gitlab (http://gitlab.shcm.longsys.com )上,即可在本地和远程仓库之间进行操作了。如下图所示:
✈️ 配置用户信息
1 | git config --global user.name "<USER>" # 设置用户名,将<USER>替换成自己的用户名 |
🚀 Git 常用命令
✈️ 常用的命令
1 | git init # 初始化并创建一个仓库 |
✈️ 分支与合并相关命令
1 | git branch # 查看本地分支 |
✈️ 网络常用命令
1 | git clone <远程仓库地址> # 克隆一个远程仓库到本地 |
其中远程主机名默认为 origin ,也可以通过 git remote
命令查询,当远程分支名和本地分支名相同时,可省略冒号以及后面的分支名。