NgSysV2-5.2:年轻人的 Git 入门

上次审核时间:2024 年 12 月

1. 简介

作为一名 IT 新手,创建第一个 VSCode 项目、学习 Javascript 并探索 Svelte 的奇妙之处时,您可能最不愿意想到的就是将项目转变为 Git 存储库(无论它是什么!)。但随着经验的积累,您会开始意识到管理项目中的源代码是一项相当大的挑战。您会进行更改,发现陷入了混乱,并希望一切都恢复到稳定状态,以便可以重试。嗯。您是如何做到的?

帖子 1.1 提到了 VSCode 的“时间线”功能。它允许您查看文件上带有时间戳的“保存”列表,并允许您选择其中任何一个来替换当前版本。这本身就很好,但有明显的局限性 - 例如,如果您想将一大堆文件重置到特定点怎么办?相比之下,Git 是“时间线”的强化版(甚至更多!)

Git 的“存储库”机制将项目文件包装在一个框架中,该框架可跟踪“提交”点之间的更改。“提交”使您可以将整个文件更改集合签署为项目的“恢复”点。然后,如果出现严重问题,您可以使用 Git 将整个项目回滚到您选择的任何提交点。更好的是,您仍然可以访问您放弃的更改。

Git 还提供了“推送”概念,使您可以在 Web 上维护本地项目的副本。有了它,当您将笔记本电脑放在公交车上时,您精心制作的项目就不会消失在历史中!通常,当您部署 Web 应用程序的新版本时,您会使用它来创建代码的安全备份“恢复”副本。事实上,在许多工作流程设计中,Git 推送是您用来自动触发部署的过程。

但是,以这种方式描述“远程存储库”概念,我严重低估了它的重要性。在严肃的系统工程领域,远程存储库是大型开发团队(每个团队都在项目代码的本地副本上操作)协调工作的点。Git 软件提供了将原本是一场噩梦般的斗争变得井然有序的方法。

当团队成员想要将他们的更改合并到主存储库时,他们会发出“拉取请求”而不是“推送”指令。这会邀请存储库控制者审查提议的更改并与开发人员协商任何必要的调整。当这样的拉取请求最终被接受时,相关更改将与主存储库合并。其他开发人员现在必须更新他们的本地存储库,以便他们依次收到所有者的“拉取请求”,要求他们将本地代码与主存储库同步。但是,这可能需要他们对当前正在开发的代码应用相应的更改 - 因此循环继续。

对这些“团队”安排的描述远远超出了本文的范围 - Pro Git 一书将是一本**极好的**书,可以让您达到更高的水平。现在,以下是作为初学者您最有可能想要做的事情的详细说明:

  • 将现有本地项目的代码转换为存储库并创建提交点
  • 恢复到提交点
  • 在网络上创建一个主存储库并将其与本地存储库同步。
  • 从网络上克隆一个公共仓库以获取其代码的本地副本。
  • 2. 将现有本地项目的代码转换为存储库并创建提交点

    这是一个相当复杂的过程,但如果你一步一步来,并使用 chatGPT 解决任何问题,你应该会没事的。让我们开始吧:

  • 首先,您需要在本地计算机上安装 Git 软件。您可以在 Git 下载中找到相关说明。该过程将库代码添加到您的计算机,使您可以在终端会话中使用“原始”Git 命令,并在 VSCode 中使用“打包”Git 工具。最初,在这篇文章中,我将在终端会话中输入“原始”命令。虽然这些命令很糟糕,但我认为它们比打包工具更能让您了解正在发生的事情。
  • 现在为您的项目打开一个终端会话并输入命令 git init。这将报告您的项目中已建立一个空的 git 存储库。如果您在 Windows 资源管理器中查看您的项目,您会发现您实际上可以“看到”存储库 - 它采用项目根目录中的 .git 文件夹的形式。如果您对 Git 感到一团糟并觉得需要重新开始,您只需删除此文件即可!
  • 此时,尽管您已经拥有一个存储库,但 Git 实际上并没有做任何有用的事情。版本控制系统目前尚未“跟踪”您的任何文件 - Git 还不知道您希望它管理哪些文件,并且“提交”请求只会使存储库保持当前的空状态。由于您可能希望它跟踪所有文件,现在请在终端会话中输入 Git add .。 . 表示“请跟踪我的所有文件”。忽略此处有关行尾不一致的任何警告 - 在项目启动时创建 jsconfig.json 等文件的 Unix 世界使用“LF”字符来终止行,而现在将在其中编辑它们的 Windows 环境使用“CR/LF”。您可以放心地让 VSCode 和 Git 在它们之间解决这个问题。
  • 现在,使用 git commit -am “Your commit message” 终端命令为您的本地存储库创建一个提交点。此处的“Your commit message”部分是一个唯一标记,用于稍后识别提交点。编写“提交消息”是一门艺术。系统会强制您将消息的第一行保持简短 - 最多 50 个字符。典型的提交语句看起来像 git commit -am “Stable login Added”。如果您想获得有关如何添加补充信息的建议,请咨询 chatGPT。
  • 3.恢复到提交点

    事情从这里开始变得有趣起来。尝试做个小实验。对项目中的几个文件进行一些随机更改并保存。然后,假设您改变了主意,想要将项目恢复到初始状态。

  • 在终端会话中输入 git restore 。现在,检查你的项目。是的,自上次提交以来所做的所有更改都已被清除。太棒了!
  • 上面介绍的简单“恢复”命令可将您的项目恢复到最近的提交。如果您想恢复较早的提交,该怎么做?首先,在终端会话中输入以下内容:git log --pretty=format:"%h : %s"。这是一个基本(但相当冗长)git log 命令的“美化”版本(即摘要和格式化版本)。它将产生如下输出:c9f6037:已添加稳定登录。这里的 c9f6037 位是提交的完整 40 个字符标识符的“短哈希”缩写。您可以使用以下命令将您的项目恢复到上面示例中的“已添加稳定登录”提交点:git restore --source "short-hash" -- .(其中“short-hash”是特定提交的短哈希)。
  • 现在您已经对 Git 的工作原理有了基本的了解,您会发现尝试使用 VSCode 工具进行提交很有用。如果您单击 VSCode 屏幕左侧工具栏列中的“源代码控制”,将显示项目中已更改文件的列表。单击其中任何一个都会显示自上次提交以来所做的更改。要创建新的提交点,只需为您的项目输入提交消息(如果您的工作区中有多个项目,请注意选择正确的部分)并单击蓝色的“提交”按钮。
  • VSCode 弹出窗口现在可能会让您感到困惑。它会询问您:“您是否要暂存所有更改并直接提交?”。这是您第一次遇到另一层版本控制实践。背景如下。一种常见的体验是,当您开发新功能到一半时,会出现紧急修复错误的需求。在这种情况下,您需要提交修复,同时保留对未完成的新功能的判断。“暂存”使您能够仅提交选定的文件。假设两个开发位于单独的文件中,然后您可以将鼠标悬停在“已更改文件”列表中的条目上,然后单击显示的“+”(“暂存更改”)符号,从而选择要“暂存”(即包含)在提交中的文件。注意不要单击此处也可用的“放弃更改”选项,除非您真的知道自己在做什么 - 这可能会不可逆转地让您失去很多有用的工作!还有更复杂的工具可用于仅暂存文件的选定部分,但本文不作介绍。如果您觉得有需要,请向 chatGPT 询问详细信息。
  • 在目前的情况下,您很可能想要提交所有更改,因此在提交时选择“暂存所有更改”选项。
  • 4. 在网络上创建一个主存储库并将其与本地存储库同步。

    如前所述,在网络上创建主存储库将为您的本地工作提供安全备份。这需要您投入一些时间,但将来可能会获得成倍的回报。

  • 首先,您需要创建一个 GitHub 帐户。GitHub 是 Microsoft 拥有和运营的开发者平台。您可以在 Github 主页创建一个(免费)帐户。我不会在这里描述此过程,因为它有点复杂,而且可能会有所变化。如果您遇到麻烦,请向 chatGPT 寻求建议。
  • 现在,使用您的新帐户登录 GitHub。单击您的个人资料图标,选择“您的存储库”(目前为空列表),然后单击“新建”按钮。为您的存储库命名 - 您可能希望根据您的 VSCode 项目名称选择一个名称 - 并告诉 GitHub 它是公开的还是私有的。如果您选择公开,其他人可以在网络上查看它并将其“克隆”(即下载)为本地存储库(稍后您将看到)。您可能希望在此阶段选择“私有” - 您以后可以随时改变主意。也拒绝创建 .gitignore 或 readme 文件。如果此时向新存储库添加任何内容,事情将变得非常复杂。您可以放心地忽略创建许可证的提议,因此现在只需单击页面底部的绿色“创建存储库”按钮即可。
  • 现在,您需要将本地存储库链接到刚刚创建的远程存储库,并将本地内容推送到其中。您可以使用在项目的终端会话中输入的一系列命令来执行此操作。为了节省您的输入,Github 将提供以下默认脚本。git remote add origin“您的存储库地址”,然后是 git branch -M main,最后是 git push -u origin main
  • 将 GitHub 脚本复制并粘贴到本地终端会话中。“add origin”位将声明您的 GitHub 存储库为您的本地存储库的远程存储库。“branch -M”位将重命名您的本地存储库为“main”。最后,“push”命令将复制本地存储库的内容到 GitHub 版本。通过在 Github“我的存储库”页面上单击您的存储库名称并浏览其文件层次结构来确认情况确实如此。您应该发现它们是您本地存储库的镜像。
  • 有了远程仓库作为项目源的“主”声明,您应该在继续进行和提交本地更改时尝试维持这种情况的过程。重复之前的练习 - 对一些测试平台项目文件进行一些更改,然后使用 VSCode 提交它们,如前所述。当您提供提交消息、单击提交按钮并选择“暂存所有更改”选项时,您应该会看到一个标有“同步更改?”的新按钮。单击此按钮将自动更新您的远程仓库,从而保持其作为本地仓库副本的完整性。
  • 提交时的一个常见错误是忘记提供“提交消息”。发生这种情况时,Git 将在编辑器中打开一个“COMMIT_EDITMSG”文件,并等待您用您应该在正常消息框中输入的内容覆盖其内容。保存并关闭此文件后,提交应正常进行
  • 5. 克隆公共仓库

    GitHub 已成为一个极具价值的软件“交换平台”,使开发人员能够协作开发代码项目。以下是如何获取公共 GitHub 存储库的副本。

  • 在 VSCode 中启动终端会话并导航到保存开发项目的文件夹的“根目录”。通常,您可以通过在现有项目上打开会话,然后输入 cd .. 命令将会话提升到文件夹层次结构的上一级来执行此操作。
  • 现在执行以下命令:git clone, 在哪里是您的目标开源 GitHub 存储库的 URL。这会将存储库添加到您的本地文件系统,您只需“将文件夹添加到您的工作区”即可在 VSCode 中查看它。
  • 有了开源项目的副本,您就可以随心所欲地使用它。您可能有兴趣添加功能并为项目做出自己的贡献。在这种情况下,您需要向项目所有者提交“拉取请求”,请求他们审查您的工作并考虑将其纳入项目。这里的安排各不相同,因此请遵循他们的指示并在必要时向 chatGPT 寻求建议。
  • 6. 后记

    虽然这篇文章提供了在个人项目中使用 Git 的基础知识,但它只是触及了 Git 在协作进行大规模开发时可以为您做的事情的表面。为此,您确实需要花一些时间阅读前面提到的“Pro Git”一书。与此同时,以下是您可能遇到的一些其他 Git 术语的解释:

  • Fork - 与使用“克隆”命令在本地计算机上创建 GitHub 存储库副本的过程不同,“fork”请求会在您的 GitHub 帐户中创建基于 Web 的副本。如果您正在开发一个开源项目,那么当您的拉取请求来自 GitHub 上的存储库而不是您的本地计算机时,管理员可能会发现处理这些请求要容易得多。您可以使用源存储库的 GitHub 页面上的 Fork 按钮来“fork”存储库。因此,您在开源协作中的工作流程可能是“fork”、“克隆”、“本地开发”、“推送(到您自己创建的 GitHub 存储库)”,最后是“从新的 GitHub 存储库发出拉取请求”。如有必要,请向 chatGPT 咨询如何发出此类请求的建议。
  • 分支 - Git 中的分支本质上是指向存储库历史记录中特定提交的指针。它允许您在不影响主代码库的情况下处理项目的单独版本。实际上,您可能会说,它创建了一条并行的开发线。您可以使用 git branch 创建分支命令,其中可能类似于 feature-x。要开始处理此分支,您可以使用 git switch feature-x 命令。如果一切顺利,并且您想要将更改合并到主分支中,则首先使用 git switch main 命令切换回主分支,然后使用 git merge feature-x 命令将功能分支更改合并到此分支中。或者,如果您认为更改不起作用并希望恢复到原始分支,则只需在 feature-x 分支上暂存并提交更改(这样 Git 就不会默认在工作目录中“保留”未提交的更改),然后使用 git switch main 命令切换出 feature-x 分支。以前,您可能使用 git restore 放弃主分支上未提交的更改。在新分支上进行更改使您能够在改变主意时恢复它们。
  • HEAD 是指向您当前正在处理的分支上的最新提交的“指针”。许多 Git 命令使用 HEAD 作为默认引用。例如: