Git 和开源贡献入门指南
介绍
世界各地有很多技术精湛的开发者,从网页开发者、安卓工程师、DevOps工程师、系统管理员、物联网开发者到简单的脚本小子……但他们总有一个难题:如何获得第三方支持。而开源贡献正能解决这个问题。
关于开源的定义有很多种,维基百科将其定义为“源代码免费提供,可以重新分发和修改的软件”,但我更倾向于认为它是属于人民、服务于人民、由人民开发的软件。
为了让软件开发人员和工程师无需亲临现场即可参与特定项目,版本控制系统(VCS)应运而生。当然,它的功能不仅限于远程协作;顾名思义,版本控制还允许用户回滚到某个特定时间点,以防在软件开发过程中出现错误。多年来,涌现出了许多版本控制系统,但 Git 最终成为最流行的版本控制系统。
本文将面向零基础的初学者,由于 Git 的功能非常广泛,我们将只讲解基础知识。不过不用担心,你只需几分钟就能掌握这些要点。
什么是版本控制?
当你处理一个简单的项目,比如一个单页HTML文件时,很容易记住上次修改的内容以及开发方向。但是,当你处理一个包含多个文件和多个开发人员的大型项目时,跟踪版本变更(也称为版本控制)就会迅速变得复杂起来。
你不仅需要记录更改,还需要记录更改者以及更改时间。要管理这种级别的版本,就需要版本控制系统。
版本控制系统 (VCS) 帮助软件团队管理源代码随时间推移发生的变更。VCS
软件包含用于保存项目状态、查看变更历史记录和回滚变更的工具。
不使用版本控制进行软件开发是存在风险的,就像没有备份一样。
版本控制系统还能增强并加速开发。根据所使用的版本控制软件,多个开发人员可以同时处理同一份代码。
例如,团队中的一位开发人员可能正在开发新功能,而另一位开发人员则在修复一个不相关的错误,每位开发人员都可以在代码库的多个部分进行更改。
版本控制系统甚至配备了工具来防止冲突,避免一个开发人员的更改与另一个开发人员同时进行的更改不兼容的情况发生。
Git 与 GitHub
自 2005 年诞生以来,Git 已成为最流行的版本控制系统。它的诞生主要是出于实际需要,因为当时很多开发者需要为 Linux 内核做出贡献。Git 的主要优势在于其分布式特性——它并非像传统版本控制系统那样,将项目的完整版本历史记录集中存储在一个地方,而是每个开发者的代码工作副本都是一个独立的仓库,可以包含所有变更的完整历史。
不过需要注意的是,Git有点像引擎,而Github是一个平台,使用户能够利用 Git 的功能。
动手实验
获取 Git
对于类 Unix 系统(Mac/Linux),git 应该默认安装在系统中。如果没有安装,这里提供了一个适用于所有平台的快速安装指南。
初始化 Git 仓库
我尽量用最简单的方式解释一下它的工作原理。事情是这样的……你有一个本地仓库(存储)和一个远程仓库。本地仓库实际上就在你的电脑上,而远程仓库则位于某个特定的在线平台(比如 GitHub 或 GitLab)上。具体来说,你通常会在本地机器上编写代码,然后将这些更改推送到远程仓库,其他成员可以看到你的修改,并从远程仓库拉取这些更改到他们自己的本地仓库。这有点像上传和下载。
为了便于理解,我们直接进入正题。
首先,我们将创建一个目录(文件夹),然后将其设置为本地 Git 仓库,以便 Git 可以跟踪其中发生的每一次更改。
启动命令行界面(*nix 用户使用终端,Windows 用户使用 Git 命令行)。
创建文件夹非常简单,只需运行命令即可。我们mkdir foldername
将其命名为 ` devstuff
<folder_name>`。目前,它只是一个名为 `<folder_name>` 的文件夹。接下来,我们需要将其创建为 Git 仓库(类似于 Git 存储)。为此,我们使用命令 `<folder_name>` 进入该文件夹cd并执行git init`<git repo_name>`(初始化 Git 仓库)
。在我的终端中…… 正如你所看到的,我们进入了该目录,它最初只是一个普通的目录。初始化 Git 后,它就变成了一个 Git 仓库。它实际上创建了一个 Git 文件夹,但默认情况下它是隐藏的,因此名称如上面生成的路径所示。 好了,我们现在有了本地 Git 仓库。接下来,我们在 GitHub 上创建一个远程仓库,然后将其连接到我们的本地仓库。 首先,您应该在 GitHub 上创建一个帐户并登录。 导航到右上角,点击按钮并选择“创建仓库” 。为了方便起见,我们将仓库名称与本地仓库相同,并添加一些简短的描述。 您应该会看到一个新页面…… 接下来,我们来分析一下可以看到的内容…… 我们已经完成了大部分必要的步骤,所以只需要运行一个命令即可。 该命令会将本地仓库链接到远程仓库。简而言之,我们将远程仓库 origin 添加到本地仓库。这些信息将包含在隐藏目录中。 在终端中…… 让我们添加一个文件以便跟踪更改。您可以使用文件管理器来添加,或者在终端中执行。 这将是一些简单的 Python 代码,包含一个简单的 print 语句。 运行一个简单的列表命令可以显示我们的文件存在。 我们可以运行命令来查看……嗯,该命令的含义显而易见。
.git+New Repository 
devstuff


git remote add origin https://github.com/WilliamOtieno/devstuff.git.git
touch dev.py
lsgit status
Git 跟踪
在处理文件时,Git 本身有一套特定的工作流程来完成任务。文件存在三种状态:
- 未追踪
- 摆拍
- 坚定的
要查找文件的实际状态,我们需要执行git status前面看到的命令。
“未跟踪”表示 Git 当前未跟踪文件的任何更改,“暂存”表示 Git 正在跟踪文件的更改,“已提交”表示已对文件的当前状态进行快照,并附带一条简单的消息(提交消息),说明具体发生了什么。
为了更好地理解发生了什么,我们再添加两个文件。为此,您可以使用文件管理器或直接使用touch [filename]命令。我将添加一个README.md文件,可能还会添加一个requirements.txt文件。
现在,要将文件从“未暂存/未跟踪”区域移动到“暂存”区域,我们应该使用git add [filename]命令。在您的命令行界面 (CLI) 中……
正如我们所见,我们已经暂存了目标python文件,但其他文件仍然留在未暂存区。因此,暂存后,我们应该提交更改。我们通过运行 `git commit` 来完成此操作git commit -m ['message']。在我们的例子中…… 但是您应该注意,提交仅应用于暂存区中的文件。其余文件仍然处于未跟踪状态。 大多数情况下,我们会处理数十个文件,因此要将本地 Git 仓库中所有未跟踪的文件添加到暂存区,我们可以使用 `git commit -a` 命令。请注意点号的位置。 这将添加当前工作目录中的所有内容,相当于添加工作目录中的所有内容。另一个命令是 `git commit -b`,其本质是添加所有内容。让我们在命令行中尝试一下并检查状态…… 让我们尝试向文件中写入一些内容,然后检查状态。您可以使用您喜欢的文本编辑器,或者在 `git commit -b` 中执行以下单行命令…… 这将简单地打印出文本,但会将输出重定向到文件,从而写入该文件。 正如您所见,该文件已被跟踪。 Git 自动检测到文件已被修改,因此我们需要使用命令提交更改。 假设您已将仓库中的所有文件暂存,现在只想取消暂存,以便 Git 不再跟踪任何更改。在这种情况下,应该使用 `git 暂存`命令。在本例中,我们取消暂存文件并检查其状态。 现在,该文件已被取消跟踪。 但是,总是看到“文件未跟踪”的提示信息,而我们却希望保持这种状态,这相当烦人。因此,我们考虑一下不希望 Git 跟踪某些文件的情况。为此,我们使用一个 `git 忽略文件`文件。它通常是隐藏的,并且没有文件扩展名。所以,让我们创建并使用它。在命令行界面 (CLI) 中,只需使用 `git忽略文件` 命令。或者,在文件管理器中,创建一个文件并命名,但不要添加任何文件扩展名,并且不要忘记前面的点号。 之后,打开该文件,并写入您希望 Git 忽略的文件名。对于多个文件,每个文件名应单独占一行。 由于这是一个新文件,请暂存该文件并提交更改,然后再次运行状态检查。
git add .git add *
README.mdbashecho "### I love Git." >> README.mdREADME.md
git commitgit rm --cached [file]requirements.txt
requirements.txt.gitignoretouch .gitignore.gitignore.gitignore
推送至远程仓库
现在,我们已经准备好将更改推送到 GitHub 上的远程仓库了。但在此之前,我确信您对上一条命令的输出结果会有疑问。"On branch master..."
嗯,这将在下一篇文章中解释,但简单来说,Git 将仓库组织成分支,这样可以避免影响生产分支或主分支。默认情况下,主分支通常被称为 `main` master,这就是它存在的原因。别担心,这并不复杂。
现在,让我们把目前为止所做的一切都推送到远程仓库。但首先,我们要验证仓库中是否真的没有任何内容。所以,请前往 GitHub 并搜索我们命名的仓库(`<repo_name>` devstuff)。 正如您所看到的,仓库中没有代码,只有一些入门指南。但在推送之前,我们应该在 GitHub 命令行中设置凭据。您应该使用与 GitHub 帐户相同的名称和电子邮件地址。 运行以下命令即可完成设置…… 现在,让我们推送代码。这将是一个简单的单行命令……
git config --global user.name "YourName"git config --global user.email"youremail@yourdomain.com"
git push -u origin master
系统会提示您输入用户名和密码。出于安全考虑,密码字段在输入时通常为空,所以不必担心。`--upgrade`
标志-u用于告诉 Git 我们要将仓库推送到上游,下次不使用该标志推送时,Git 会记住我们要推送到上游。此外,` origin<remote_rope>` 是远程仓库的默认名称,因此实际上我们是将代码推送到名为 `<remote_rope>` 的远程仓库origin,并推送到名为 `<branch_name>` 的分支master。 刷新浏览器标签页,瞧!您会看到代码现在已经存在。远程仓库中还会包含提交消息和提交时间。 您也可以点击单个文件来查看其内容。

结论
Git 并没有人们想象的那么复杂。这只是系列文章的第一部分,但后面的内容并不长。实际上,这些内容足以让你入门开源贡献。如有任何疑问,请关注我的 GitHub 页面并发送消息。感谢
您抽出宝贵时间阅读。