GitHub是什么?它可不仅仅是云中的Git版本控制器

智能真的很好说 2024-09-10 18:38:42
GitHub是开源项目和想要共享和协作代码的程序员最多的主机,原因如下。

GitHub的核心是Git存储库托管服务,即基于云的源代码管理或版本控制系统,但这仅仅是个开始。此外,GitHub还实现了代码审查(拉取请求、diff和审查请求)、项目管理(包括问题跟踪和分配)、与其他开发人员工具的集成、团队管理、文档和“社交编码”的功能。

GitHub就像一个程序员的社交网站,是一个开放的环境,程序员可以自由共享和协作(甚至是临时)开源代码。GitHub可以轻松找到有用的代码,复制存储库供自己使用,并提交对他人项目的更改。因此,GitHub几乎成为每个重要的开源项目的所在地,除此之外还有无数其他项目。

每当我想探索一个开源项目时,我都会从搜索项目名称开始。一旦我找到项目网站,我就会查找其代码存储库链接,十有八九我最终会在GitHub上结束。

Git版本控制

在我们了解GitHub的作用和GitHub的工作原理之前,我们需要了解Git。Git是一个分布式版本控制系统,最初由Linus Torvalds于2005年为Linux内核社区编写,并在Linux内核社区的帮助下编写。我不是来向你推销Git的,所以我不用说它有多快、小、有多灵活和有多受欢迎,但你应该知道,当你克隆Git存储库(简称“repo”)时,你会在自己的计算机上获得整个版本历史记录,而不仅仅是一次一个分支的快照。

Git最初是一个命令行工具,与它起源于Linux内核社区相得其渊源。如果你愿意,你仍然可以使用Git命令行,但你不必这样做。您可以在Windows或Mac上使用免费的GitHub客户端,或Git的任何其他GUI,或与Git集成的代码编辑器,而不是命令行。所有这些选项最初都比命令行更容易使用。Git命令行预装在大多数Mac和Linux系统上,并支持所有操作;GUI通常支持经常使用的Git操作子集。

Git与Subversion等旧版本控制系统不同,它是分布式的,而不是集中的。它也相当快,特别是因为大多数操作都发生在您的本地存储库上。尽管如此,使用Git增加了一定程度的复杂性:将代码提交到本地存储库和将提交推送到远程存储库是分开的步骤。当团队忘记这一点(或没有被教导过)时,可能会导致不同的开发人员使用已经发散的代码库。

远程Git存储库可以在服务器上,也可以在另一个开发人员的机器上。这为团队提供了许多可能的工作流程。一个常见的工作流程涉及使用服务器存储库作为“祝福”存储库,其中只有经过审查、经过充分测试的代码才会提交,通常通过开发人员存储库发出的拉取请求。

GitHub功能

我已经注意到,GitHub是一个基于云的Git服务器,用于代码托管和社交编码,它实现了代码审查(拉取请求、diff和审查请求)、项目管理(包括问题跟踪和分配)、与其他开发人员工具的集成、团队管理和文档等功能。

GitHub在社交编码方面的一项创新是提交共同作者,您通过在提交消息的末尾添加一个或多个“共同作者”预告片来完成。此机制本身不影响回购核心,也不会改变回购在普通Git上的外观,但在GitHub上,chrome将在提交列表中显示多个提交者,并在贡献图中为每个共同作者提供信用。

如果您愿意,您可以使用GitHub GraphQL API扩展GitHub。与GitHub之前的API相比,这是一个重大改进,API基于REST调用。

星标(Star)、分叉(Fork)和订阅(Watch)

在GitHub平台上,每个存储库(repository)的星标(Star)、分叉(Fork)和订阅(Watch)数量都扮演着重要的角色,它们从不同维度反映了该存储库的受关注程度与活跃度。让我们更准确地理解这些概念及其背后的意义:

星标(Star):星标是GitHub用户表达对某个存储库喜爱或认可的方式。通过给存储库加星标,用户可以轻松地在自己的“星星”页面找到并再次访问这些存储库,这对于追踪感兴趣的项目或主题非常有帮助。星标数量也是衡量存储库受欢迎程度的一个重要指标。GitHub会根据星标数量对存储库进行排名,这有助于新用户发现高质量、高活跃度的项目。此外,星标也常被看作是对存储库维护者工作的一种鼓励与肯定。分叉(Fork):分叉是GitHub上一种独特且强大的功能,它允许用户创建并管理一个存储库的副本。这个副本(即分叉)与原始存储库保持代码和某些可见性设置的同步,但拥有者可以自由地对其进行修改而不会影响原始存储库。分叉对于开源开发尤为重要,因为它为那些没有直接提交权限的开发者提供了一个修改和贡献代码的途径。开发者可以在自己的分叉上进行开发,并通过提交拉取请求(Pull Request)将更改建议合并到原始存储库中。有时,分叉也被用来启动新的项目,尤其是当原项目的发展方向与某些开发者的愿景不符,或者原项目的许可证发生变化时。订阅(Watch):订阅(在GitHub的早期版本中称为“Watch”)功能允许用户接收关于存储库中新活动的通知。这些活动可能包括新的提交、拉取请求、问题(issue)的创建与更新等。用户可以根据自己的需求自定义和过滤通知,例如,选择只接收特定类型活动的通知,或者通过电子邮件而非GitHub网站接收通知。订阅功能使得用户能够紧密关注他们感兴趣的存储库的动态,及时参与讨论或贡献代码。

综上所述,星标、分叉和订阅是GitHub平台上衡量存储库受关注程度与活跃度的三个重要指标,它们各自以不同的方式促进了开源社区的发展与合作。

跟随

除了观看回购外,您还可以在GitHub上关注个人和组织,以接收有关其活动的通知,并发现其社区中的项目。一个组织的活动包括其新的讨论、赞助和存储库。

您还可以查看有人关注的用户列表,以及关注某人的用户列表。当您想了解特定地区正在发生的事情,并且您了解在该领域活跃的人和组织时,关注特别有用。例如,要了解wasmCloud发生了什么,您可以关注wasmCloud组织和wasmCloud/wasmCloud的一些主要贡献者。

存储库的部分

GitHub存储库顶部列出了八个部分,右栏下面列出了七个部分。右侧列出的部分往往是不言自明的,因此我们将专注于顶部显示的部分。

一个GITHUB存储库。注意右栏顶部和下面列出的部分。这是PYTHON版本的LANGCHAIN的主要代码REPO。IDG

代码

如果你做过任何软件开发,你可能熟悉GitHub存储库的代码部分。有了现代高速互联网,导航在线存储库的响应速度几乎与在自己的计算机上导航代码库一样快。如果您有权限,您甚至可以在在线编辑器或“代码空间”(见下文)中处理代码。

问题

GitHub问题本质上是一个以错误和建议为导向的讨论和存储库跟踪板。一些存储库使用GitHub Issues对错误跟踪、功能请求和拉取请求的澄清有很大效果。开源存储库也可以使用GitHub Issues来宣传需要贡献者的领域。项目有时使用其他系统来跟踪错误,而不是GitHub问题,如Jira、Bugzilla或Redmine。

拉取请求

回购的拉取请求部分基本上列出了已提交审批的拉取请求。拉取请求是将一组更改从一个代码分支(可能位于具有少量提交者的项目的分叉回购中)合并到另一个分支的提案。本页右上角有一个“新拉取请求”按钮。

如果回购对拉取请求运行自动检查(通常通过GitHub操作),这些通常显示为本节中拉取请求列表的注释。如果回购有有限的提交者组,他们可以使用回购的这一部分作为指导,以决定他们应该审查哪些拉取请求以进行可能的合并。

讨论

GitHub Discussions是一个围绕开源或内部项目的社区协作沟通论坛。它与GitHub Issues是分开的,尽管两者之间在使用方面存在一些重叠。GitHub Discussions更像是一个专注于用户的支持和一般讨论板,而GitHub Issues更像是一个专注于软件开发人员的错误和建议跟踪板。不使用GitHub Discussions的项目可能会使用Discord或vBulletin。

行动

GitHub Actions是一个CI/CD(持续集成和持续交付)或devops系统;它允许您自动构建、测试和部署管道。它还可以用于其他目的,例如在添加新问题时通过分配标签来分类GitHub问题。

GitHub操作中的事件,如创建拉取请求、打开问题或将提交推送到存储库,会触发工作流,这些工作流运行一个或多个作业,并可能包括其他工作流。作业是工作流程中的一组步骤,在同一运行器上执行。每个步骤要么是将要执行的shell脚本,要么是将要运行的操作。步骤按顺序执行,并相互依赖。操作是GitHub操作平台的自定义应用程序,可以执行复杂但经常重复的任务。

运行器是在触发工作流程时运行的服务器。每个工作流程运行都在一个新的、新配置的虚拟机中执行,该虚拟机可能使用Ubuntu Linux、Microsoft Windows或macOS。

不使用GitHub Actions的项目可能会使用Jenkins、CircleCI、Bamboo、Azure Pipelines或其他CI/CD产品。尽管有替代方案,但GitHub Actions相当受欢迎。

项目

GitHub项目是一个适应性强的电子表格、任务板和路线图,可以与您在GitHub上的问题和拉取请求集成,以帮助您有效地计划和跟踪工作。

安全

公共存储库可以在其“安全”选项卡中发布安全策略和建议。漏洞报告人可以私下协作,以修复临时叉子中的漏洞。GitHub可以为新的CVE分配常见漏洞和暴露(CVE)编号;当您报告安全漏洞时,您还可以提供现有的CVE识别号。

深入观察

存储库的“见解”选项卡可以通过图表、图形和列表帮助您了解存储库及其社区的状态和健康状况。例如,下面的代码频率图显示了每周的代码添加和删除。此图表中的峰值通常反映了新版本。代码频率图末尾长期缺乏活动可能表明一个垂死的项目。此存储库(langchain)看起来活跃且健康。

LANGCHAIN-AI/LANGCHAIN的代码频率表。绿色区域是代码的补充,红色区域是删除。IDG

GitHub代码空间

GitHub Codespaces在基于Linux的Docker容器中提供了一个开发环境,该环境在GitHub在Microsoft Azure云中托管的虚拟机上运行。默认情况下,代码空间使用安装了流行语言和工具的Ubuntu Linux映像,但您可以为特定的Linux发行版、语言、框架、脚本和工具自定义开发容器环境。代码空间目前支持四个代码编辑器:Visual Studio Code Desktop、Visual Studio Code Browser、JetBrains IDE(有多个不同语言版本,但它们都使用相同的GitHub Codespaces插件)和通过SSH的命令行。

GitHub代码空间的替代品包括Gitpod、Coder和Visual Studio Online等。在上面的LangChain代码回购单的屏幕截图中,您可以在绿色代码按钮旁边看到一个启动Gitpod的绿色按钮,除其他外,该按钮可以启动代码空间。

GitHub软件包

GitHub Packages是一个用于托管和管理软件包的平台,包括容器和其他依赖项。您可以将GitHub软件包与GitHub API、GitHub操作和webhooks集成,以创建包括代码、持续集成和部署解决方案的端到端devops工作流程。GitHub软件包目前支持半打软件包注册,如NPM、Maven和NuGet。

Git大文件存储

GitHub一直限制您可以检查到存储库的文件大小。大于50 MiB的文件有警告,大于100 MiB的文件有硬块。对于大于1 GB的存储库,可能会有警告。

Git Large File Storage允许您通过在repo中存储对文件的引用,并将实际文件存储在其他地方来处理大文件。要在本地Git存储库中启用此功能,您需要安装Git LFS。即使使用LFS,最大文件大小也有限制;这些限制取决于您的GitHub计划,从个人帐户的2 GB到企业帐户的5 GB不等。

如果文件实际上没有存储在回购中,为什么要限制文件大小?当您克隆回购时,GitHub仍然需要下载大文件。

GitHub发布和标签

GitHub支持发布,这些版本是可部署的打包软件迭代。发布基于Git标签。GitHub将自动包含下载zip文件的链接,以及在创建标签时包含存储库内容的tarball。您可以手动创建发布说明,也可以使用模板自动创建。您可以在发布中包含二进制文件的链接,但二进制文件本身通常超过2 GiB文件大小限制。

GitHub副驾驶

GitHub Copilot是一个人工智能配对程序员。个人和企业可通过订阅获得。GitHub Copilot扩展目前适用于五个编辑环境。这些是Visual Studio Code、Visual Studio、JetBrains IDE、Vim/Neovim和Azure Data Studio。

GitHub Copilot可以在您的IDE中执行代码生成和代码完成。GitHub Copilot Chat允许您在GitHub.com和支持的IDE上提出问题并接收与编码相关主题的答案。

你不能依赖GitHub Copilot生成的代码:有时它很好,有时它甚至无法编译。你应该像对待有酗酒问题的初级程序员一样对待GitHub Copilot,并仔细审查和测试其代码。

GitHub企业

GitHub.com是一种云托管服务,可以处理一系列帐户类型:免费开发人员帐户、团队(每个用户每月4美元)和企业(每个用户每月21美元)。如果您希望在AWS、Microsoft Azure或Google Cloud Platform上本地或您自己的云实例中运行GitHub Enterprise,您可以。

GitHub与Bitbucket

GitHub不是唯一的托管增强型Git服务,GitHub Enterprise也不是公司唯一的本地产品。Atlassian Bitbucket与两者竞争,价格略低,并具有免费的五人团队级别,包括无限制的私人存储库和使用Bitbucket管道进行持续集成。GitHub是开源项目更受欢迎的网站,它拥有更多的开源开发人员库。Bitbucket的定价过去对小型初创企业更有利。现在GitHub允许在免费和团队帐户上无限制的私人存储库,情况不再是这样了。

GitHub与GitLab

GitLab与GitHub和Bitbucket竞争,包括托管和本地。从表面上看,GitLab似乎比其他的具有更多的生命周期功能,但如果你在评估Bitbucket时包含Jira,与Bitbucket的区别基本上会消失。GitLab为开源项目免费提供黄金计划云功能,但该附加功能并不能真正补偿GitHub上更大的开源开发人员社区。

GitHub桌面

如下所示,GitHub Desktop可以轻松管理您的GitHub.com和GitHub企业存储库。虽然它没有实现Git命令行和GitHub Web GUI的所有功能,但它确实实现了您每天在桌面上执行的所有操作,同时为项目做出贡献。通常,您将从GitHub克隆回存到GitHub Desktop,根据需要同步它们,为您的工作创建分支,提交您的工作,并偶尔恢复一个或多个提交。

要处理您缺乏提交和协作权限的存储库,您通常首先在GitHub上分叉存储库,并将分叉克隆到桌面上。然后,您在GitHub Desktop中添加您需要的任何分支,提交您想要的任何更改,测试您的工作,将提交推送回您的远程分叉repo,最后向父项目生成拉取请求。

您可以在GitHub桌面界面的右上角看到“拉取请求”按钮。您还可以在Neo4j项目中看到许多提交,这些提交是分支或拉取请求的合并。这是开源项目的典型,提交者很少,贡献者很多。

GITHUB桌面为您提供了一个方便的GUI,用于添加或克隆存储库、导航分支、推送更改和管理拉取请求。

开源项目的GitHub

开源软件项目通常需要执行质量控制的方法,同时仍然接受核心提交者团队以外的贡献。对贡献者的需求是巨大的,但在保持代码库的完整性的同时,将新的贡献者引入项目是一项困难且潜在的危险任务。与此同时,对项目用户反馈的需求也很大。

GitHub有许多机制可以帮助润滑开源项目的车轮。例如,用户可以在GitHub上向项目添加问题,以报告错误或请求功能。其他一些系统称这些票。处理问题的项目经理可以生成任务列表,将问题分配给特定贡献者,提及其他感兴趣的贡献者,以便他们收到更改通知,添加标签和添加里程碑。

要为项目做出贡献,您基本上从主题头分支开始,该分支包含您希望添加到项目基础分支的提交更改,并从头分支初始化拉取请求,如下所示。然后,您推送您的提交,并将其添加到项目分支中。其他贡献者可以查看您提议的更改,添加评论,为拉取请求讨论做出贡献,并在拉取请求中添加自己的提交。

一旦参与的每个人都对拟议的更改感到满意,提交者就可以合并拉取请求。合并可以保留所有提交,将所有更改压缩为单个提交,或将提交从头分支重新基础到基础分支。如果合并产生冲突,您可以在GitHub上或使用命令行解决冲突。

GitHub上的代码审查允许分布式团队异步协作。对审查员有用的GitHub工具包括diff(以下屏幕截图的下半部分)、历史记录(上半部分)和指责视图(一种通过提交查看文件提交演变的方法)。GitHub上的代码讨论进入根据您的代码更改呈现的评论。如果内置工具不足以满足您的项目,您可以从GitHub市场添加代码审查和持续集成工具。对于开源项目来说,市场附加组件通常是免费的。

GITHUB为您的代码提供了许多有用的视图,包括提交历史记录(顶部)和DIFF视图(底部)。

GitHub的要理

Gists是特殊的GitHub存储库,用于共享您的工作(公开)或保存工作以供以后重复使用(秘密)。它们可以包含单个文件、部分文件或完整的应用程序。您可以下载gists、克隆它们、分叉它们并嵌入它们。

可以在搜索中发现和找到公共要点。您可以使用关键字来缩小您找到的内容,包括前缀,将结果限制在特定用户的要点、至少有N颗星的要点、具有特定文件名的要点等。

秘密要求无法搜索,但任何拥有URL的人都可以看到它们。如果您真的想保护您的代码,请使用私有存储库。

正如我们所看到的,GitHub提供Git存储库作为一项服务,以及代码审查、项目管理、与其他开发人员工具集成、团队管理、社交编码和文档等功能。虽然GitHub不是该类别中唯一的产品,但它是开源软件开发的主要存储库。

0 阅读:0