- Git 教程
- Git - 主页
- Git - 基本概念
- Git - 环境设置
- Git - 生命周期
- Git - 创建操作
- Git - 克隆操作
- Git - 执行更改
- Git - 审查更改
- Git - 提交更改
- Git - 推送操作
- Git - 更新操作
- Git - 存储操作
- Git - 移动操作
- Git - 重命名操作
- Git - 删除操作
- Git - 修复错误
- Git - 标签操作
- Git - 补丁操作
- Git - 管理分支
- Git - 处理冲突
- Git - 不同的平台
- Git - 在线存储库
- Git 有用的资源
- Git - 快速指南
- Git - 有用的资源
- Git - 讨论
- Git - 波斯语版本
Git - 基本概念
版本控制系统
版本控制系统 (VCS)是一种帮助软件开发人员协同工作并维护完整工作历史记录的软件。
下面列出了 VCS 的功能 -
- 允许开发人员同时工作。
- 不允许覆盖彼此的更改。
- 维护每个版本的历史记录。
以下是 VCS 的类型 -
- 集中版本控制系统(CVCS)。
- 分布式/分散式版本控制系统(DVCS)。
在本章中,我们将只关注分布式版本控制系统,尤其是 Git。Git属于分布式版本控制系统。
分布式版本控制系统
集中版本控制系统(CVCS)使用中央服务器来存储所有文件并实现团队协作。但CVCS的主要缺点是它的单点故障,即中央服务器故障。不幸的是,如果中央服务器宕机一小时,那么在这一小时内,根本没有人可以协作。即使在最坏的情况下,如果中央服务器的磁盘损坏并且没有采取适当的备份,那么您将丢失项目的整个历史记录。这里,分布式版本控制系统(DVCS)应运而生。
DVCS 客户端不仅可以查看目录的最新快照,还可以完全镜像存储库。如果服务器出现故障,则可以将任何客户端的存储库复制回服务器以进行恢复。每次签出都是存储库的完整备份。Git 不依赖于中央服务器,这就是为什么您可以在离线时执行许多操作。您可以在离线状态下提交更改、创建分支、查看日志以及执行其他操作。您仅需要网络连接来发布更改并获取最新更改。
Git 的优点
免费和开源
Git 是在 GPL 的开源许可证下发布的。它可以通过互联网免费获得。您可以使用 Git 来管理房产项目,而无需支付一分钱。由于它是开源的,您可以下载其源代码并根据您的要求进行更改。
又快又小
由于大多数操作都是在本地执行的,因此在速度方面具有巨大的优势。Git 不依赖于中央服务器;这就是为什么每个操作都不需要与远程服务器交互。Git 的核心部分是用 C 编写的,这避免了与其他高级语言相关的运行时开销。尽管 Git 镜像了整个存储库,但客户端的数据量很小。这说明了Git在客户端压缩和存储数据的效率。
隐式备份
当存在多个数据副本时,丢失数据的可能性非常小。任何客户端上存在的数据都会镜像存储库,因此可以在发生崩溃或磁盘损坏时使用它。
安全
Git 使用称为安全哈希函数 (SHA1) 的常见加密哈希函数来命名和识别其数据库中的对象。每个文件和提交都会在签出时进行校验和并通过其校验和进行检索。这意味着,如果不了解 Git,就不可能更改 Git 数据库中的文件、日期、提交消息和任何其他数据。
无需强大的硬件
对于 CVCS,中央服务器需要足够强大才能满足整个团队的请求。对于较小的团队来说,这不是问题,但随着团队规模的增长,服务器的硬件限制可能会成为性能瓶颈。对于 DVCS,开发人员不会与服务器交互,除非他们需要推送或拉取更改。所有繁重的工作都发生在客户端,因此服务器硬件确实可以非常简单。
更容易分支
CVCS使用廉价的复制机制,如果我们创建一个新分支,它会将所有代码复制到新分支,因此非常耗时且效率不高。此外,CVCS中分支的删除和合并是复杂且耗时的。但是使用 Git 进行分支管理非常简单。创建、删除和合并分支只需要几秒钟。
DVCS 术语
本地存储库
每个 VCS 工具都提供一个私人工作场所作为工作副本。开发人员在其私人工作场所进行更改,提交后,这些更改将成为存储库的一部分。Git 更进一步,为他们提供了整个存储库的私有副本。用户可以使用此存储库执行许多操作,例如添加文件、删除文件、重命名文件、移动文件、提交更改等等。
工作目录和暂存区或索引
工作目录是检出文件的地方。在其他 CVCS 中,开发人员通常进行修改并将更改直接提交到存储库。但 Git 使用了不同的策略。Git 不会跟踪每个修改过的文件。每当您提交操作时,Git 都会查找暂存区域中存在的文件。仅考虑提交暂存区域中存在的那些文件,而不考虑所有修改的文件。
让我们看看Git的基本工作流程。
步骤 1 - 您修改工作目录中的文件。
步骤 2 - 将这些文件添加到暂存区域。
步骤 3 - 您执行提交操作,将文件从暂存区域移出。推送操作后,它将更改永久存储到 Git 存储库。
假设您修改了两个文件,即“sort.c”和“search.c”,并且您希望每个操作有两个不同的提交。您可以在暂存区添加一个文件并进行提交。第一次提交后,对另一个文件重复相同的过程。
# First commit [bash]$ git add sort.c # adds file to the staging area [bash]$ git commit –m “Added sort operation” # Second commit [bash]$ git add search.c # adds file to the staging area [bash]$ git commit –m “Added search operation”
斑点
Blob代表二进制大对象。_ 文件的每个版本都由 blob 表示。Blob 保存文件数据,但不包含有关该文件的任何元数据。它是一个二进制文件,在 Git 数据库中,它被命名为该文件的 SHA1 哈希值。在 Git 中,文件不是通过名称来寻址的。一切都是针对内容的。
树木
树是一个对象,它代表一个目录。它包含 blob 以及其他子目录。树是一个二进制文件,存储对 blob 和树的引用,也称为树对象的SHA1哈希值。
提交
提交保存存储库的当前状态。提交也由SHA1哈希命名。您可以将提交对象视为链表的一个节点。每个提交对象都有一个指向父提交对象的指针。从给定的提交中,您可以通过查看父指针来回溯以查看提交的历史记录。如果一个提交有多个父提交,则该特定提交是通过合并两个分支创建的。
分支机构
分支用于创建另一条开发线。默认情况下,Git 有一个 master 分支,与 Subversion 中的 trunk 相同。通常,创建一个分支是为了处理新功能。一旦功能完成,它就会与主分支合并,然后我们删除该分支。每个分支都由 HEAD 引用,它指向分支中的最新提交。每当您进行提交时,HEAD 都会更新为最新的提交。
标签
标签为存储库中的特定版本分配一个有意义的名称。标签与分支非常相似,但不同之处在于标签是不可变的。这意味着,标签是一个分支,没有人打算修改它。一旦为特定提交创建了标签,即使您创建新的提交,它也不会被更新。通常,开发人员为产品发布创建标签。
克隆
克隆操作创建存储库的实例。克隆操作不仅会检查工作副本,还会镜像完整的存储库。用户可以使用此本地存储库执行许多操作。唯一涉及网络的时间是同步存储库实例时。
拉
拉操作将更改从远程存储库实例复制到本地存储库实例。拉取操作用于两个存储库实例之间的同步。这与 Subversion 中的更新操作相同。
推
推送操作将更改从本地存储库实例复制到远程存储库实例。这用于将更改永久存储到 Git 存储库中。这与 Subversion 中的提交操作相同。
头
HEAD 是一个指针,它始终指向分支中最新的提交。每当您进行提交时,HEAD 都会更新为最新的提交。分支的头存储在.git/refs/heads/目录中。
[CentOS]$ ls -1 .git/refs/heads/ master [CentOS]$ cat .git/refs/heads/master 570837e7d58fa4bccd86cb575d884502188b0c49
修订
修订版代表源代码的版本。Git 中的修订由提交表示。这些提交由SHA1安全哈希值标识。
网址
URL 表示 Git 存储库的位置。Git URL 存储在配置文件中。
[tom@CentOS tom_repo]$ pwd /home/tom/tom_repo [tom@CentOS tom_repo]$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = gituser@git.server.com:project.git fetch = +refs/heads/*:refs/remotes/origin/*