Python中的Git模块
在这篇文章中,我们将讨论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 config -- global user.name " name of the user goes here "
$ git config - global user.email "username@forexample.com"
设置完用户名之后,用户需要一个存储库来进行工作。创建一个存储库非常简单。用户可以在目录中使用git初始化命令:
$ mkdir sample
$ cd sample
$ git init
用户可以在/home/tmp/sample/.git/中初始化空的Git仓库。
创建仓库后,用户可以在Git模块上搜索它。用户最常使用的Git模块命令是Git状态:
$ git status
这个输出向用户显示了一些信息,比如他们在哪个分支上,并且他们没有要提交的内容。没有要提交的内容意味着在Git模块所在的目录中没有Git模块不知道的文件。
这就是我们创建一个代码库的方法。
步骤2. 向代码库中添加一个新文件
在代码库中创建一个Git不知道的文件。使用编辑器创建文件sample.py,在其中只有一个打印语句。
#Sample.py
print ( ' Adding a New File ! ' )
在这之后,如果用户再次运行git status
命令,他们将会看到不同的结果:
$ git status
检查完新文件后,Git模块会告诉用户该文件未被跟踪。这意味着Git表示该特定文件不属于存储库,也不受版本控制。用户可以通过将新文件添加到Git来解决此问题。使用git add命令将文件添加到Git模块中。
$ git add sample.py
$ git status
现在Git已经知道了新文件sample.py,并且它会将文件列在要提交的更改列表中。将文件添加到Git模块中会将其转移到暂存区。这意味着用户现在可以将文件提交到代码库中。
提交更改
每当用户提交更改时,他们告诉Git模块将文件的此级别的状态保存到代码库中。用户可以使用git模块的commit命令来执行此操作。命令中的-m选项告知git模块提交以下消息。如果用户在运行命令时不使用-m选项,Git模块将打开编辑器让用户创建提交消息。用户应该像这样输入命令来提交消息:
$ git commit -m " creating sample.py "
$ git status
现在用户可以看到提交命令已经返回了一些信息,其中大部分并不是很有用,但它确实告诉用户只有一个文件被更改,因为用户只向存储库中添加了一个文件。提交命令还向提交的简单哈希算法(775ca29)提供了信息。
再次运行git status命令后,显示用户现在有一个干净的工作目录,这意味着文件中的所有更改都没有提交到Git。
Git模块的暂存区
Git模块有一个暂存区,通常称为索引。暂存区是Git模块用于跟踪用户在下一次提交中想要进行的更改的地方。当用户运行Git Add命令时,如上所示,将一个新文件 sample.py 移动到了暂存区,该更改将显示在git status中。项目的文件从git模块的未跟踪部分移动到了输出的待提交部分。
Git模块的暂存区显示了用户运行git add命令时文件的确切内容。如果用户再次修改此文件,该文件将在git status输出的暂存和未暂存区域都可见。
在使用已经提交过一次的文件时,可以在git模块上的任何阶段找到三个版本的文件供用户使用:
- 用户正在编辑的文件版本位于用户的硬盘上。
- Git模块在用户的暂存区中保存的另一个版本。
- 文件的第三个版本位于存储库中。
这三个文件版本中的每一个都可能不同。通过将更改移至用户的暂存区,然后提交文件,用户可以将所有这些文件版本恢复到同步状态。
.gitignore
Git模块中的git status命令非常便捷,用户经常使用它。但有时,用户可能会发现有一些文件显示在git模块的未跟踪部分,而他们不想让git模块看到这些文件。为此,用户可以使用.gitignore文件。
例如:
#Let's create a new Python file of the project in the same directory called example.py:
#example.py
Def get_example ( ) :
return " cow "
在此之后,修改sample.py文件以包含example.py并调用其函数:
#sample.py
import example
example = example.get_example ( )
print ( " Animal { } " .format (example) )
每当用户导入本地模块时,Python都会将模块编译成字节码并将文件保存在其文件系统上。在Python2中,将模块编译为字节码后,它将以example.pyc的形式保存文件。但是在Python3中,它将生成一个pycache目录并将.pyc文件存储在其中。
例如:
完成此操作后,如果用户运行git status命令,他们将看到该特定目录出现在未跟踪部分中。用户还可以看到他们的 example.py文件 出现在未跟踪部分中,但他们对sample.py所做的更改出现在新部分中,即 “Changes not staged for commit” 。此部分意味着用户之前所做的更改尚未添加到git模块的暂存区中。
例如:
$ git status
要将example.py和sample.py文件添加到存储库中,用户需要做与之前相同的操作。
例如:
$ git add example.py sample.py
$ git status
现在,用户应该提交更改并完成清理:
$ git commit -m " add example module "
每当用户运行git status命令时,他们将看到像这样的pycache目录:
$ git status
如果用户想要忽略所有的 pycache 目录及其内容,他们需要在他们的代码库中添加一个 .gitignore 文件。这是一个非常简单的过程。用户只需在他们所选择的编辑器中修改该文件即可。
# .gitignore
__pycache__
然后,用户需要运行git status命令,他们不再看到pycache目录及其内容。尽管用户会看到新的.gitignore文件。
例如:
$ git status
.gitignore 这个文件只是一个普通的文本文件,可以像其他普通文件一样添加到仓库中。
例如:
$ git add .gitignore
$ git commit - add " create .gitignore "
在.gitignore文件中有一个更多的入口,即用户存储在虚拟环境中的目录。这个目录被称为virtualenvs。virtualenvs目录通常被称为env或venv。
用户可以将这些添加到项目的.gitignore文件中。通过这样做,项目中的目录或文件将被忽略。如果没有文件或目录存在,将不会有任何操作。
用户还可以在其主目录中存储一个全局的.gitignore文件。如果用户的编辑器用于保存临时文件或在本地计算机系统的目录中创建备份文件,则此过程非常简单方便。
例如:
# .gitignore
__pycache__
Venv
Venv /
Venv.bak /
env /
env.bak /
.pytest_cache
.cover /
.coverage
用户不应该添加到Git仓库的东西
当用户在任何版本控制工具的初始阶段工作时,最有可能使用Git模块。用户希望将各种文件存储在Git仓库中,但这是一个错误。Git模块确实有限制,也存在安全问题,因此用户在添加到git仓库中的文件和数据类型上面临一些限制。
所有版本控制系统的基本规则是用户只能将源文件添加到版本控制系统中,而不要将生成的文件添加到版本控制系统中。
源文件是用户在编辑器中输入时创建的任何文件。生成的文件则是计算机在处理源文件时创建的文件。
例如:
Sample.py是一个源文件,而
Sample.pyc是生成的文件。
不涉及生成的文件到Git仓库的原因有:
- 将生成的文件存储在仓库中是浪费空间和时间的。生成的文件可以再次创建,并且可能需要以不同的格式重新创建。如果用户1使用IronPython或Cython,而用户2使用Jython解释器,则.py文件格式将不同。提交一个格式的.pyc文件可能会在仓库中创建冲突。
- 生成的文件比项目的源文件要大。将生成的文件添加到Git仓库意味着该特定项目的所有其他用户和开发人员都必须下载并存储这些文件,即使他们不需要这些文件。
- Git仓库的另一个规则是用户应该小心提交二进制文件,并避免提交大型文件。
Git模块仓库不保存用户提交的每个文件的完全副本。相反,仓库使用复杂的算法,该算法基于文件的不同版本。这减少了存储文件所需的数量。但是对于二进制文件,此算法不适用,因为二进制文件(例如MP3或JPG文件)没有很好的差异工具。对于二进制文件,Git模块仓库必须在用户提交时保存项目的完整文件。
当用户使用Git模块或将文件存储在GitHub仓库时,不要在仓库中保存机密信息,并在公开共享时注意。
Git Log
Git log是Git模块的命令。Git log用于查看用户进行的提交的历史记录。
例如:
$ git log
用户可以在git存储库中查看用户所做的提交历史。所有提交消息将按照它们被创建的顺序显示。提交的起始位置将由单词”commit”以及提交的简单哈希区域标识。 Git日志命令将提供每个简单哈希区域的历史。
结论
本文讨论了Git模块、版本控制系统、如何在Git中进行提交以及它的存储库功能、向Git模块和GitHub的存储库中添加文件和信息的规则。介绍了不同类型的Git命令,例如gitignore、git log、git add、git status等,并说明它们在项目文件和目录中的使用。