初识Git
Posted Tuki_a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识Git相关的知识,希望对你有一定的参考价值。
Git(傻瓜式内容跟踪器)
Git简介
Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小到大的所有项目。
Git 是一个快速、可扩展、分布式版本控制系统,具有异常丰富的命令集,提供高级操作和对内部的完全访问。
Git易于学习, 占用空间小,性能快如闪电。它优于 Subversion、CVS、Perforce 和 ClearCase 等 SCM 工具,具有便宜的本地分支、方便的暂存区和 多个工作流等功能。
Git必看秘籍:https://git-scm.com/book/zh/v2
Git特点
速度、简单的设计、对非线性开发模式的强力支持(允许成千上万个并行开发的分支)、完全分布式、有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)。
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
VCS (版本控制系统)介绍
本地版本控制系统:
大多都是采用某种简单的数据库来记录文件的历次更新差异。其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。
集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS):
这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
可以让不同系统上的开发者协同工作。
上述两个系统都有一样的缺点:
显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
分布式版本控制系统:
在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
Git项目的三个阶段
Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
Git命令集语法
语法如下:
git [--version] [--help] [-C <路径>] [-c <名称>=<值>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<路径>] [--work-tree=<路径>] [--namespace=<名称>]
[--super-prefix=<路径>] [--config-env=<名称>=<环境变量>]
<命令> [<参数>]
更多详细参数用法参考官方文档:https://git-scm.com/docs/git#_git_commands
Git的使用
新手git教程:https://git-scm.com/docs/gittutorial
获取 Git 仓库通常有两种方式:
1、将尚未进行版本控制的本地目录转换为 Git 仓库。
2、从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone
将项目导入Git
创建一个新目录当作是项目目录
mkdir test
cd test
安装Git工具包
进入工作目录进行初始化版本库,查看隐藏文件会发现创建了一个名为“.git”的新目录(.git目录是git跟踪管理版本库的)。
创建一个文件(注意跟踪的都得是文件形式的,不能是二进制程序),查看状态现在是未知状态(-s是简化输出)
告诉 Git 对当前目录下read.md文件的内容进行快照,使用git add。此快照现在存储在 Git 称为“索引”的临时暂存区中。查看状态已变为A(意为本地新增的文件)
使用git commit将索引的内容永久存储在存储库中,使用给定的“add read.md”作为提交消息。我的报错是因为git不知道进行这个操作的人是谁,git需要记录,所以根据提示告诉git自己是谁
执行如下命令告诉git自己是谁,重新提交成功
对文件进行修改,拍快照再提交。可以看到状态的变化,在右边红色的M是跟踪的文件有内容变化,在左边绿色的M是修改已到暂存区待提交。
查看已暂存和未暂存的修改
# git diff
没拍快照前(即没进入工作区之前)撤销更改
以vim的方式添加内容
查看状态
拍快照后作新的修改,状态出现了两个M(即一部分修改在工作区,一部分在暂存区)
提交只提交了在暂存区的一部分,由此可以看出每次修改都是独立的,都需要拍快照提交
提交后撤销更改
设置忽略文件
创建一个隐藏文件和一个隐藏目录,查看状态只有文件的,因为目录里没东西
进入目录创建一个文件,查看状态文件和目录都有
一般情况下,隐藏文件大多是一些临时文件,我们并不需要将其上传保存,所以编辑忽略文件,内容如下
[root@lucky test]# vim .gitignore
.*
这回再查看状态就没有了
版本升级
再作更改提交为版本2
查看日志可以看到操作记录
删除文件+版本回退
删除文件,状态变为D
执行git rm
提交到暂存区,状态变为绿色
reset再+checkout可以取消删除操作
重新删除提交后是真的删除了
但是因为我们当时作修改时作为新版本提交了,所以可以回到版本二,那么文件就回来了
以上是关于初识Git的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
VSCode自定义代码片段15——git命令操作一个完整流程