Python 中的 Git 模块

2025年3月17日 | 阅读11分钟

在本文中,我们将讨论 Python 编程语言中的 Git 模块,以及用户如何在 Python 项目中使用它。我们还将讨论用户如何将 Git 模块与 GitHub 结合使用,以便我们可以与其他用户合作开发大型项目。我们还将学习如何创建 Git 仓库,如何查看所有项目文件的历史记录,如何回到项目初始阶段,以及如何在仓库中添加新文件并修改它们。

什么是 Git?

Git 模块是 Python 语言的一个分布式版本控制系统。版本控制系统是一套用于跟踪项目文件历史记录的工具。用户可以通过指示 Git 版本控制系统轻松地在任何时间点保存文件的状态。此后,用户可以继续编辑项目文件并在任何状态下保存项目。在任何当前状态下保存项目就像备份项目目录一样。在 Git 模块中,保存状态称为进行一次 提交

每当用户在 Git 模块中进行提交时,用户都会添加一条提交消息,解释在该项目状态下所做的所有更改。Git 模块可以显示用户在项目中进行的所有更改和提交的历史记录。Git 模块的此功能确实有助于用户找出他们所做的工作并专门查找潜入系统中的所有错误。

通过使用 Git 模块,用户还可以比较项目文件与不同的 提交。Git 模块还允许用户轻松地将任何文件或文件恢复到项目的早期状态。

分布式版本控制系统与版本控制系统略有不同。早期的版本控制系统通过将所有提交本地保存在用户的硬盘上工作。用户本地硬盘上的这些提交集合称为 仓库。但由于此,用户无法与在同一代码库上工作的团队合作。由于与团队在同一项目上工作,用户需要将其仓库保存在所有其他团队成员都可以访问的平台上。分布式版本控制系统将仓库保存在一个主服务器上,该服务器可以由许多用户和开发人员共享。这还具有文件锁定功能。

对于 Git 模块,大多数用户和开发人员使用 GitHub 作为中央仓库,任何人都可以访问文件。GitHub 就像一个中央位置,任何人都可以共享代码,每个人都可以访问它。即使在使用 GitHub 后,完整的仓库仍然保存在所有本地仓库中。

Git 模块的基本用法

到目前为止,我们已经了解了 Git 模块的概况。本主题将讨论用户如何开始在本地计算机系统上使用 Git 模块。

步骤 1:创建新仓库

要开始使用 Git 模块,用户首先需要输入他们的信息。他们必须使用 Git 配置命令设置用户名。

设置用户名后,用户将需要一个仓库来工作。创建仓库非常容易。用户可以在目录中使用 Git 初始化命令

用户可以在 /home/tmp/sample/.git/ 中初始化空的 Git 仓库

创建仓库后,用户可以在 Git 模块中搜索它。用户最常使用的 Git 模块命令是 Git status


Git Modules in Python

此输出向用户显示了一些信息,例如他们所在的哪个分支以及他们没有任何要提交的内容。无提交意味着目录中没有 Git 模块不知道的文件。

我们就是这样创建仓库的。

步骤 2. 将新文件添加到仓库

在 Git 不知道的仓库中创建一个文件。使用编辑器创建文件 sample.py,其中只包含一个打印语句。

此后,如果用户再次运行 Git status 命令,他们将看到不同的结果


Git Modules in Python

检查新文件后,Git 模块会告诉用户该文件是未跟踪的。这意味着 Git 说该特定文件不是仓库的一部分,也不受版本控制。用户可以通过将新文件添加到 Git 来解决此问题。使用 git add 命令将文件添加到 Git 模块。


Git Modules in Python

现在 Git 知道新文件 sample.py,它会将该文件列在“要提交的更改”下。将文件添加到 Git 模块会将其传输到暂存区。这意味着用户现在可以将文件提交到仓库。

进行提交更改

每当用户提交更改时,他们都在告诉 Git 模块将此级别的文件状态保存到仓库中。用户可以通过使用 git 模块的 commit 命令来完成此操作。命令中的 -m 选项通知 git 模块提交以下消息。如果用户在运行命令时没有使用 -m,Git 模块将为用户打开编辑器以创建提交消息。要提交消息,用户应像这样编写命令


Git Modules in Python

Git Modules in Python

用户现在可以看到 commit 命令返回了一些信息,其中大部分用处不大,但它确实告诉用户只有一个文件发生了更改,因为用户只在仓库中添加了一个文件。commit 命令还通知提交的简单哈希算法 (775ca29)。

再次运行 git status 命令后,它显示用户现在有一个干净的工作目录,这意味着文件中所有更改都未提交到 Git。

Git 模块的暂存区

Git 模块有一个暂存区,通常称为索引。暂存区是 Git 模块跟踪用户想要在下一次提交中进行的更改的地方。每当用户运行 Git Add 命令时,就像上面将新文件 sample.py 移动到暂存区一样,此更改在 git status 中显示。项目文件从 git 模块的未跟踪部分移动到输出的待提交部分。

当用户运行 git add 命令时,Git 模块的暂存区显示文件的确切内容。如果用户再次修改此文件,该文件将同时在 git status 输出的暂存区和非暂存区中可见。

在处理文件(已提交一次)的 git 模块的任何阶段,有三个版本的文件可供用户使用

  • 一个版本在用户的硬盘上,用户正在编辑它。
  • 另一个版本由 Git 模块存储在用户的暂存区中。
  • 第三个版本存在于文件的仓库中。

文件的所有三个版本可能彼此不同。通过将更改移动到用户的暂存区,然后提交文件,他们可以将文件的所有这些版本同步。

.gitignore

Git 模块中的 git status 命令非常易于访问,用户可以最常使用它。但有时,用户可能会发现有几个文件显示在 git 模块的未跟踪部分,并且他们不希望 git 模块看到它们。为此,用户可以使用 .gitignore 文件。

例如

之后,修改 sample.py 文件以包含 example.py 并调用其函数

每当用户导入本地模块时,Python 就会开始将该模块编译为字节码并将其文件保存在其文件系统上。在 Python2 中,将模块编译为字节码后,它将以 example.pyc 的形式保存文件。但在 Python3 的情况下,它将生成一个 _pycache_ 目录并将 .pyc 文件存储在其中。

例如

Git Modules in Python
Git Modules in Python

完成此操作后,如果用户运行 git status 命令,他们将看到该特定目录出现在未跟踪部分。用户还可以看到他们的 example.py 文件 在未跟踪部分,但他们对 sample.py 所做的更改在新部分中,该部分称为 "Changes not staged for commit"(未暂存的更改)。此部分意味着用户之前所做的更改尚未添加到 git 模块的暂存区。

例如


Git Modules in Python

要将 example.py 和 sample.py 文件添加到仓库,用户需要执行与之前相同的操作。

例如


Git Modules in Python

现在,用户应该提交更改并完成清理


Git Modules in Python

每当用户运行 git status 命令时,他们将看到如下所示的 _pycache_ 目录


Git Modules in Python

如果用户希望忽略所有 _pycache_ 目录及其内容,则他们必须在仓库中添加一个 .gitignore 文件。这是一个非常简单的过程。用户必须在他们选择的编辑器中编辑文件。

然后,用户必须运行 git status 命令,他们将不再看到 _pycache_ 目录及其内容。尽管用户会看到新的 .gitignore ! 文件。

例如


Git Modules in Python

.gitignore 文件只是一个普通的文本文件,可以像其他普通文件一样添加到仓库中。

例如


Git Modules in Python

.gitignore 文件中还有一个条目,它是用户存储在其虚拟环境中的目录。此目录称为 virtualenvs。virtualenvs 目录通常称为 env 或 venv。

用户可以将这些添加到项目的 .gitignore 文件中。通过这样做,仓库中存在的项目目录或文件将被忽略。如果没有文件或目录存在,则不会执行任何操作。

用户还可以在其主目录中存储全局 .gitignore 文件。如果用户的编辑器用于保存临时文件或在计算机系统的本地目录中创建备份文件,则此过程非常简单。

例如

用户不应向 Git 仓库添加什么?

当用户处于任何版本控制工具(很可能与 Git 模块一起使用)的初始阶段时。用户可能希望将所有类型的文件存储在 Git 的仓库中,但这是一个错误。Git 模块确实存在限制和安全问题,因此用户在可以添加到 git 仓库的文件和数据类型方面面临一些限制。

所有版本控制系统的基本规则是用户只应在版本控制系统中添加源文件,绝不应将生成的文件添加到版本控制系统。

源文件是用户在编辑器中键入时创建的任何文件。生成的文件是计算机在处理源文件时创建的文件。

例如

Sample.py 是一个源文件,而

Sample.pyc 是生成的文件。

不将生成的文件包含在 Git 仓库中的原因

  • 将生成的文件存储在仓库中是浪费空间和时间。生成的文件可以再次创建,并且可能需要以不同的格式重新创建。如果用户 1 使用 IronPython 或 Cython,而用户 2 使用 Jython 解释器,则 .pyc 文件将彼此不同。提交一种格式的 .pyc 文件可能会在仓库中造成冲突。
  • 生成的文件比项目的源文件大。在 Git 仓库中添加生成的文件意味着该特定项目的所有其他用户和开发人员也必须下载文件并存储它们,即使他们不需要这些文件。
  • Git 仓库的另一个规则是用户应谨慎提交二进制文件,并应避免提交大尺寸文件。

Git 模块仓库不会保存用户提交的每个项目文件的完整副本。相反,仓库使用复杂的算法,该算法基于文件不同版本的差异。这减少了所需存储文件量。但此算法不适用于二进制文件,因为 MP3 或 JPG 等二进制文件没有良好的差异工具。对于二进制文件,Git 模块仓库必须在用户每次提交时保存项目的完整文件。

当用户在 Git 模块上工作或将文件存储在 GitHub 仓库中时,请勿在公开共享时将机密信息保存在仓库中。

Git Log

Git log 是 Git 模块的命令。Git log 用于查看用户提交的历史记录。

例如


Git Modules in Python

用户可以查看用户在 git 仓库中提交的历史记录。所有提交消息将按其创建顺序出现。提交的开头将由单词“commit”标识,后面跟着提交的简单哈希区域。Git log 命令将提供每个简单哈希区域的历史记录。

结论

本文讨论了 Git 模块、版本控制系统、如何在 Git 及其仓库函数中进行提交、在 Git 模块和 GitHub 的仓库中添加文件和信息的规则。不同类型的 Git 命令,例如 .gitignore、git log、git addgit status 等,以及它们在项目文件和目录中的使用。