GitHub — 是微软旗下最大的Git仓库托管、协作开发和流程自动化网络平台。它不仅提供带有版本控制的代码存储,还提供完整的项目管理工具集:Issue Tracking、带代码审查的Pull Request、用于CI/CD的Actions以及用于文档的Wiki。根据GitHub,2024的数据,该平台拥有超过1亿开发者和4.2亿个仓库。
要点
GitHub — 是一项用于存储和协作处理Git仓库的网络服务,由Tom Preston-Werner、Chris Wanstrath和P.J. Hyett于2008年创立。2018年,该公司被微软以75亿美元收购。该平台为所有Git操作提供Web界面,并在此基础上添加了社交功能:fork、星标、订阅、代码审查和内置的持续集成系统。
GitHub 与竞争对手的主要区别在于其开放的生态系统和最大的开发者社区。GitHub上托管着Android、Kubernetes、React、Swift、Kotlin以及成千上万其他开源项目的源代码。这使得该平台不仅成为代码存储工具,也成为开发者的社交网络:可以关注项目、讨论更改并通过pull request做出贡献。
根据微软2024年的报告,每天有超过1000万个新的Pull Request通过GitHub,月活跃用户数已超过1亿。该平台支持500多种编程语言、根据文件扩展名自动检测语言以及代码语法高亮。
GitHub的功能 远超简单的Git托管。该平台提供:GitHub Actions — 内置的CI/CD系统;GitHub Packages — 包和容器注册表;GitHub Codespaces — 基于VS Code的云端开发环境;GitHub Discussions — 社区论坛;GitHub Security — Dependabot用于自动更新依赖和扫描漏洞;GitHub Copilot — 用于编写代码的AI助手。
对于组织,GitHub提供GitHub Enterprise — 具有自托管(GitHub Enterprise Server)或云端部署(GitHub Enterprise Cloud)的企业版。企业功能包括SAML/SSO认证、活动审计、仓库安全策略以及99.95%可用性的SLA。企业版被Google、Apple和Airbnb等公司使用。
GitHub的一个重要特性是GitHub CLI (gh),它允许从命令行执行平台上的所有操作,无需使用Web界面。使用gh可以创建仓库、管理Issues、查看Pull Request以及直接从终端启动Actions,从而加快了习惯使用命令行的开发者的工作速度。
| 功能 | 用途 | 可用性 |
|---|---|---|
| Actions | CI/CD和自动化 | 免费2000分钟/月 |
| Codespaces | 基于VS Code的云端IDE | 付费,60小时/月免费 |
| Packages | 包和Docker镜像托管 | 免费500MB |
| Dependabot | 自动更新依赖 | 对公共仓库免费 |
| Pages | 静态网站托管 | 免费 |
Pull Request (PR) — 是在GitHub项目中进行更改的主要机制。开发者创建一个包含更改的分支,将其发布到GitHub,并向主分支发送合并请求(Pull Request)。项目的其他参与者可以看到分支之间的差异(diff),可以对特定的代码行发表评论,提出更改建议,以及批准或拒绝请求。
GitHub上的代码审查过程是围绕PR构建的。每条评论都附加到diff的特定行,可以分为三种类型:Comment(普通评论)、Request Changes(需要修改)和Approve(批准)。在进行了更改之后,作者用新的提交更新PR,审查过程重复进行。当所有意见得到解决并且PR获得批准后,更改将被合并到目标分支。
# 创建feature分支并推送
git checkout -b fix-login-bug
git add src/
git commit -m "Fix login validation error"
git push -u origin fix-login-bug
# 通过CLI创建PR
gh pr create --base main --title "Fix login validation" \
--body "Fixed edge case with empty email field"
# 查看和合并PR
gh pr review --approve fix-login-bug
gh pr merge --squash fix-login-bug
GitHub支持分支保护(branch protection rules):可以禁止直接推送到main分支,要求合并前必须获得一定数量的批准,运行Actions检查并要求分支在合并前保持最新。分支保护在Settings → Branches中配置,是生产项目的强制实践,可防止不稳定的代码意外进入主分支。
GitHub Actions — 是一个内置的CI/CD平台,允许直接在仓库中自动化工作流程。工作流程用YAML文件描述,位于.github/workflows/目录中。每个工作流程由一个或多个作业组成,这些作业在运行器上执行——运行Linux、Windows或macOS的虚拟机。
Actions支持事件驱动模型:工作流程在推送、创建PR、发布release、按计划或通过webhook时触发。这允许在无需开发者参与的情况下自动化构建、运行测试、静态代码分析、在应用商店发布和部署到服务器。以下是Android项目的工作流程示例:
name: Android CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
- name: Build with Gradle
run: ./gradlew assembleDebug
Actions生态系统包括GitHub Marketplace上的超过20,000个现成的操作。流行的操作包括:checkout(克隆仓库)、setup-java/setup-node/setup-python(配置环境)、upload-artifact(保存构建产物)、cache(缓存依赖以加速)、slack-notify(向Slack发送通知)。Actions还支持矩阵构建——在多个操作系统或语言版本上同时运行。
Issues — 是GitHub内置的任务跟踪系统。每个Issue都有标题、描述、标签(labels)、指定的执行者(assignees)、里程碑(milestones)和相关的Pull Request。Issues可以模板化——用于错误报告、功能请求或问题,在创建时会自动使用不同的模板。
GitHub Projects(前身为Projects Beta)——是一个基于看板的项目管理工具,类似于Jira和Trello。Projects支持自定义字段(状态、优先级、冲刺)、与Issues和Pull Request的连接、任务状态更改时卡片的自动移动以及燃尽图形式的分析。Projects有两种模式:Table(表格视图)和Board(看板视图)。
为了管理发布,GitHub提供Milestones——由共同目标和截止日期连接的Issue和PR组。每个里程碑显示执行进度:有多少任务打开、有多少关闭以及是否遵守截止日期。里程碑与Releases集成——在发布release时,可以将其连接到里程碑,并根据已关闭的Issue自动在CHANGELOG中生成更改列表。
GitHub Pages — 是用于静态网站的免费托管,自动将仓库内容发布到https://username.github.io/repository地址。Pages支持HTML、CSS、JavaScript和静态生成器:Jekyll(内置)、Hugo、Next.js(导出)和MkDocs。配置包括选择发布的分支和目录,以及支持自定义域名。
对于技术文档,GitHub提供Wiki——一个内置的wiki系统,也作为Git仓库存储。Wiki支持Markdown,允许通过Web界面和本地通过推送到wiki仓库来编辑页面。每个Wiki页面都有自己的更改历史,便于记录API、架构和项目流程。
GitHub Pages + Jekyll的组合——是文档网站的流行解决方案。Jekyll自动将Markdown文件转换为静态HTML页面,支持主题、导航和搜索。例如,Android开发者文档之前使用GitHub Pages上的Jekyll,现在使用内部平台,但成千上万的开源项目仍然使用这种组合来构建他们的网站。
GitHub CLI (gh) 允许通过命令行执行平台上的所有操作:创建仓库、管理Issues、查看和批准Pull Request、启动Actions。gh repo create my-project --public命令创建远程仓库并将其连接到本地仓库,gh pr create从当前分支创建Pull Request。CLI加快了喜欢终端而非Web界面的开发者的工作速度。
GitHub REST API和GraphQL API提供对所有平台功能的编程访问:创建Issue、管理用户、获取统计信息和管理Actions。GraphQL API更适合复杂查询,因为它允许在一次查询中仅获取所需字段。REST API的速率限制——对于经过身份验证的用户为每小时5000次查询。该API被广泛用于将GitHub与外部CI系统和内部DevOps工具集成。
GitHub Gist — 一种用于发布代码片段而无需创建完整仓库的服务。Gist支持语法高亮、嵌入外部网站和版本历史。每个Gist可以是公开的(在搜索结果中可见)或私密的(只能通过链接访问)。Gist用于在团队通信中快速共享配置、日志和代码示例,也可作为开发者的Pastebin类似工具。
常见问题
GitHub 侧重于开放社区和社交功能(fork、星标)。GitLab提供更强大的内置CI/CD和自托管(Self-Managed),没有Actions分钟限制。
GitHub Team 每月每用户4美元,提供无限私有仓库、分支保护和Actions(3000分钟)。免费套餐适合小型开源项目。
创建仓库时,选择Private而不是Public。在私有仓库中,只有被邀请的参与者才能看到代码。在免费套餐中,私有仓库最多可供3个协作者使用。
GitHub Copilot — 基于OpenAI Codex的AI助手,提供实时代码自动补全。适用于VS Code、JetBrains和Neovim,支持所有流行的编程语言。
进入Settings → Danger Zone → Delete this repository。删除是不可逆的——所有提交、Issues和Wiki都将被删除,无法恢复。请事先确保您有备份。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。