Git 简介

已发表: 2022-06-30

无论您是在构建全新的网站、开发主题或插件,还是设置高级持续集成和部署策略,您都将使用代码。

在每个网站下,都有正在执行的代码——无论您使用的是 WordPress、WooCommerce、Drupal、Magento、NextJS,还是手工编码的 HTML。 需要一组文件来使每个页面呈现并向世界显示内容。

您很快就会发现,您需要一种方法来跟踪代码随时间的变化。 您需要知道任何文件的最新版本中有哪些更改,以及谁进行了每次更改。

这就是 Git 的用武之地。继续阅读以了解 Git、使用远程 Git 存储库等。

了解 Git

Git 是一个版本控制系统,它允许开发人员和其他任何处理文件的人轻松创建和存储其更改的版本,查看这些更改的历史记录,并在设备和系统之间共享这些更改,同时提供一种方式在出现问题时撤消这些更改。

一个简短的历史

早在 2005 年,一个开发团队正在创建一个名为 Linux 的项目,这是一个免费的开源操作系统。 他们需要一种在数百名贡献者之间轻松交流更改的方法。 最初,他们一直在传递包含更新代码的各个补丁,但这在许多方面都存在问题,尤其是在确定任何特定更改集的“真实”和最新版本时。

对这些问题感到沮丧,Linux 项目导致 Linus Torvald 实现了一个相当新颖的想法,让项目在开发人员之间共享整个代码库并拍摄他们的更改的“快照”,称为提交,可以与任何其他副本共享和合并代码,在世界任何地方。 这立即有助于沟通,因为所有项目变更都可以被视为一个单一的历史。

捕获这些快照的方法是 Git,它很快就拥有了自己的生命,并且从那时起就独立于 Linux 项目开发。

变化图

从概念上讲,您可以将 Git 视为节点图,其中每个节点都是整个项目在某一时刻的快照。 git-scm.com 上的 Git 书概述了快照的结构。

Git 将数据存储为项目随时间的快照

这个快照链随着时间的推移构建了一个图表,最新版本在前面,或者在您的更改历史记录的顶部。 在 Git 中,每个快照都称为“提交”。

如果您将最近的更改放在图表的顶部,可以快速浏览一下 Git 项目的外观。 注意——这个例子使用 GitKraken Git GUI 来可视化图表。

示例 git 图

构建 Git 图表

Git 通过提交更改的过程构建此更改图,也称为您的 Git 历史记录。 但是,在您提交更改之前,您需要明确告诉 Git 您要添加到该快照中的内容,或者按照 Git 中正确引用的方式提交。

在本地工作时,您在项目中保存的所有更改都在您的“工作目录”中。 Git 可以看到这些更改,但还不知道您要提交哪些更改。 您需要使用名为“git add”的命令将这些特定文件添加到 Git 的“暂存区”,明确告诉 Git 要提交哪些更改。

一旦你有了想要提交到项目快照图的文件更改,你就可以使用“Git commit”命令将该快照永久地构建到图上。

Git 添加和提交步骤

时光倒流

Git 的优点之一是可以使用整个项目历史记录,即您可以随时返回并撤消任何和所有更改。

如果您所做的最后一次提交破坏了某些内容,或者您​​改变了对所做操作的想法,您可以执行“Git revert”来恢复 Git 提交。 这会在图表上创建一个新的提交,它只是撤消您刚刚所做的更改。

如果您想及时跳回并让它看起来像您从未提交过,您可以使用“Git reset”来执行此操作。

Git中分支和合并的力量

Git 为我们提供的最强大的功能之一是能够创建并行的替代现实。 不完全是。

由于您正在制作随时间推移的提交图,因此您可以选择从历史中的任何时间点制作平行的提交线,称为分支。 新创建的 Git 分支独立于主历史,这意味着您可以自由地进行任何您想要的更改,并且不会影响您的其他工作。 主时间线也是一个分支,通常称为“主”或“主”分支。 新分支和除 main 之外的分支通常称为“功能分支”。

对功能分支进行更改后,您可以通过执行 Git 合并将所有更改应用到主分支。

以这种方式工作有一个很大的优势。 功能分支隔离代码更改,因此如果您确实引入了错误,您可以放心主分支是安全的。 在分支中工作还可以释放主分支,以防您需要在不中断正在进行的开发工作的情况下应用更新或安全修复。

Git 合并还允许您将更改从主分支拉到功能分支中。 这使您能够确保对主分支所做的更新仍然适用于您提出的更改,然后再尝试将它们与“main”合并。

如果您正在与团队合作,Git 分支策略可以确保您的团队可以在将更改投入生产之前对其进行彻底测试,并提供一种直接的方式来管理流程。

在 Git 中使用远程存储库

Git 的主要目标之一是让与世界各地的人们共享代码变得简单。 Git 内置了远程存储库的概念。

Git 存储库是您存储工作的整个项目文件夹,并且是 Git 随时间跟踪的内容。 每个存储库都可以使用 Git clone 命令进行克隆,并且可以无限次共享,这使得 Git 非常具有可扩展性。

另一个使 Git 具有高度可扩展性的方面是,如果您更改了一个文档,您不需要存储该文档的全新副本。 更改存储为称为“增量”的小信息包,Git 需要存储或共享的只有文件中单独修改的行和有关更改的少量数据。 Delta 非常轻量级,通常只有几个字节大小。 例如,如果您更改 100KB 文档中的一行,则增量将只有 20 个字节左右。

为了使存储库的所有副本中的所有内容保持一致和一致,您只需指定位于哪台计算机上的哪个副本是项目的“真实”副本,然后确保提交到该副本。

这也适用于另一种方式。 与他人协作时,您可以将他们的更改拉入您的本地存储库副本,以确保您的项目本地副本是最新的。

使用远程存储库的 git 模型

有许多公司使远程存储库上的协作变得非常简单和易于管理。 GitHub、GitLab 和 BitBucket 等平台提供在线 Git 存储库托管和协作工具。 数以百万计的开发人员在线管理着数以百万计的 Git 存储库,无论有多少人在协作,Git 都会跟踪每一个事实来源。

什么不能存储在 Git 中

让我们谈谈你可能不应该用 Git 做什么。 尽管 Git 在共享代码和跟踪随时间的变化方面非常出色,但有些工作并不适合该模型。 幸运的是,Git 为我们提供了一种方便的方法来告诉它忽略某些内容,称为“.gitignore”文件。

如果存在“.gitiginore”文件,Git 将检查它是否应该监视这些项目。 在“.gitiginore”中,您可以列出单个文件名、整个目录或整个文件类型。 例如,如果您想排除所有 .png 和 .jpg 文件以及整个“wp-content/uploads”文件夹,则在“.gitiginore”文件中只需编写:

 *.png *.jpg wp-content/uploads

为什么要从 Git 中排除媒体文件?

Git 存储项目的快照,并且只传递“增量”。 但是,如果所讨论的文件是数据“blob”,例如图像、视频或任何其他二进制文件,则文件的每次更改都会创建一个全新的数据 blob。 然后 Git 需要记住旧 blob 和新 blob 的状态,给存储库增加了很多不必要的大小。 随着时间的推移,这种情况会逐渐增加,并且随着您失去 Git 的轻量级优势,存储库很快就会变得笨拙。

信不信由你,您可能不想跟踪 WordPress 核心本身的变化。 这有几个原因。

首先,任何 CMS 都有一句老话:“不要破解核心!” 您在 WordPress 的核心中应该没有任何需要跟踪的更改。 任何更新都需要来自 WordPress 本身,如果您想要更早的版本,安装时很容易指定。 您绝对可以在 Git 中存储整个 WordPress 安装,但在某些情况下这样做没有太大价值。 您真的只想跟踪您正在操作的代码的更改,例如您的自定义插件和子主题。 向您的托管服务提供商咨询他们对此主题的建议是一个非常好的主意。

其次,如果您打算回馈 WordPress,您会发现它实际上是通过称为 SVN 的旧版本控制系统维护的。 这种模型需要一个中央服务器基础设施,与 Git 相比,它的流行度要低得多,但话说回来,WordPress 比 Git 更老。 使用 SVN 补丁系统有点不同,您应该查阅他们的文档以获取更多信息。

结论

希望您现在对 Git 是什么以及如何利用它来处理您的网站代码有了更好的理解。 Git 可用于您将随时间更改的任何和所有文件,即使它不是计算机代码。

Git 将其目标用户称为“知识工作者”,这是从 IBM 借来的一个旧术语。 对于从桌面上的笔记到食谱,再到整本书的所有内容,Git 为您提供了一种更好地组织工作的方法,并为自己留下了一个可靠的线索,说明您为什么要进行每次更改以及何时进行更改。

能够及时返回并查看您的更改的能力,以及在无限平行宇宙中工作的能力以及分支和合并的能力,使 Git 成为任何从事代码工作的人不可或缺的工具。 Git 也是团队在代码项目上协作的主要方式。

Git 是免费使用的,大多数 Git GUI,比如 GitKraken 都有免费版本。 你没有理由不使用 Git 来跟踪你的工作,所以“Git”吧!

相关资源

- 使用 XAMPP 进行 WordPress 本地开发

- 高级 Git 使用和工作流程

- Git 钩子

- 什么是开发站点?

- 缓存 WordPress