1 Github介绍

1.1 Git和Github

Git是一个版本控制系统。版本控制系统,是设计用于跟踪文件随时间变化的状态的一款软件。Git是一个分布式的版本控制系统。在Git中参与项目的每个程序员不仅能够拥有文件的当前状态,还能拥有项目完整的历史记录。

GitHub是一个网站,可以像该网站上传一个Git数据库副本。使用GitHub可以使你与他人合作一个项目变的更加容易。GitHub提供了如下机制:

  • 共享库的位置

  • 分叉(forking:A复制一个B的项目到自己的账户下,修改后再提交,B能看到A修改的内容,但是B原本的项目是不会有变动的)

  • 拉取请求(pull request)

  • 提出问题(issue)

版本控制系统(version control system)像个数据库,它会记录所有对项目文件的更改(比如一个文件,前天加了三段文字,昨天删了一句话,今天改了几个词,这三个版本历史都能保存下来)。 版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。

功能:使用版本控制系统可以协同合作(多人编辑文件或代码而不出错),版本存储(你改动的每一版本都保存下来,如果改错可以回到之前的版本,如果想加上删除的内容也可以返回去找,也可以对比现在和之前的版本,看改了什么),文件备份(服务器和本地都有完整的历史版本,如果服务器坏了,本地还有一份完整的历史记录)。

总结:无论你是不是程序员,你都可以用 GitHub。你可以把它当个网盘存包括代码的文件,可以和团队一起做个项目(文件啥的就不用保存一堆迭代版本啦),可以找资源(里面有很多宝藏资源),可以建个博客,也可以像在微博、知乎、博客一样,分享你的东西。

1.2 概念初识

概念 释义
提交(commit) 提交更改到仓库(本地Git仓库与GitHub仓库是两码事)。
提交信息(commit message) 每次提交的时候,需要提供一个信息,描述这次提交都做了什么。
主分支(master branch) 所有的Git项目在最初创建时,都会默认创建出一个分支,这就是主分支。在开发中,写一个新功能的时候,都是先建立一个分支,在该分支上完成功能并测试,通过后由项目leader将该分支merge到master上。
分支(branch) 像树状图一样,每个独立的分支都是项目的一个版本,分支都可以与master合并。
合并(merge) merge可以将一个分支上的全部内容归并到另一个分支上,一般就是将分支merge到主分支。
标签(tag) 常用于记录发布版本,在版本发布的时候,给一个tag,这样就能够记录该版本的代码是何时生成的。
查看(check out) 一般就是查看某一个分支上操作的记录。
拉取(pull request) 一般用来从远程仓库拉取分支中的代码到本地,也可以从本地仓库中拉取分支代码到当前工程中。
提出问题(issue) GitHub的提出问题的功能,一般遇到问题,可以将出现问题的场合,通过issue的方式记录。
克隆(clone) 从GitHub上下载一个副本到本地,操作后可以pull上去。
分叉(fork) A复制一个B的项目到自己的账户下,修改后再提交,B能看到A修改的内容,但是B原本的项目是不会有变动的。

1.3 注册Github

官方网站为:https://github.com/

image.png

注册过程很简单,填写相应的信息就行。

1.4 Github页面介绍

首先,登录账号之后,可以先创建一个自己的仓库,这个很简单,随便创建一个就行。当我们重新登入Github后可能会看见如下界面:

关闭这些弹窗广告之后,页面变为:

点击上图中左上侧的后,出现的选项如下:

  • 特别注意
    • Pull requests:你想参与别人的项目或想改进别人的项目,改进后可提交申请,用Pull requests。
    • Issues:你发现别人项目的 bug,或者有什么问题,怎么和作者交流呢?提一个 Issue ;别人也可以给你的项目提 Issue 反馈问题。Issue 追踪各种想法,增强功能,任务,bug,有点儿像评论功能。
    • Marketplace:应用商店,里面有免费/收费的开发工具。
    • Explore:你可以理解成软件里的发现页,点进去推荐一些和你相关的话题、项目、新闻等

点击右上角的 +图标 可用于新建:

这里简单解释Repository(仓库)Organization(组织)Project(项目) 三个概念:

  • Repository(仓库)
    • 定义
      • Repository(仓库)是 GitHub 上最基本的存储单元,用于存储和管理代码、文件、文档等与项目相关的所有内容。
      • 每个仓库可以包含代码文件、提交历史、分支、标签、问题(Issues)、拉取请求(Pull Requests)、Wiki、GitHub Pages 等。
    • 用途
      • 用于版本控制和协作开发。
      • 开发者可以将代码推送到仓库中,与团队成员协作开发项目。
      • 仓库可以设置权限,控制谁可以查看或修改仓库中的内容。
  • Organization(组织)
    • 定义
      • Organization(组织)是一个包含多个用户的集合,通常用于团队或公司。
      • 组织可以拥有多个仓库,这些仓库可以是公开的(Public)或私有的(Private)。
      • 组织可以设置不同的权限级别,控制成员对仓库的访问和操作。
    • 用途
      • 用于团队协作和项目管理。
      • 团队成员可以加入组织,共同管理和开发多个仓库。
      • 组织可以设置团队和角色,分配不同的权限和职责。
  • Project(项目)
    • 定义
      • Project(项目)是 GitHub 提供的一种项目管理工具,用于帮助团队跟踪任务、计划和进度。
      • 项目通常以看板(Kanban Board)的形式呈现,可以将任务分为不同的列(如“待办”、“进行中”、“已完成”)。
    • 用途
      • 用于项目管理和任务跟踪。
      • 团队成员可以将任务分配给特定的用户,并设置截止日期。
      • 项目可以与仓库中的 Issues(问题)关联,方便跟踪任务的进展。

具体例子

假设有一个公司 TechCorp,他们使用 GitHub 来管理他们的项目和代码。

  1. Organization(组织)
    • TechCorp 创建了一个 GitHub 组织,名为 TechCorp
    • 这个组织包含多个团队,如 开发团队测试团队文档团队
    • 每个团队有不同的权限,例如开发团队可以访问和修改所有仓库,而文档团队只能访问和修改文档相关的仓库。
  2. Repository(仓库)
    • TechCorp 组织中有多个仓库,例如:
      • techcorp/website:存放公司网站的代码。
      • techcorp/app:存放公司主要应用程序的代码。
      • techcorp/docs:存放公司文档的代码。
    • 每个仓库都有自己的版本控制、提交历史、Issues 和 Pull Requests。
  3. Project(项目)
    • TechCorp 创建了一个项目,名为 TechCorp 2024 年度项目
    • 这个项目是一个看板,用于跟踪公司主要应用程序的开发进度。
    • 项目中有多个列,如“待办”、“进行中”、“已完成”。
    • 每个列中有多个任务卡片,例如:
      • 待办:修复用户登录问题、优化数据库查询。
      • 进行中:实现新功能、测试新功能。
      • 已完成:修复已知漏洞、优化性能。
    • 项目中的任务卡片可以与仓库中的 Issues 关联,例如“修复用户登录问题”可以链接到 techcorp/app 仓库中的一个 Issue。

总结

  • Repository(仓库):用于存储和管理代码和文件,是版本控制和协作开发的核心。
  • Organization(组织):用于团队协作和项目管理,包含多个用户和仓库。
  • Project(项目):用于项目管理和任务跟踪,帮助团队更好地组织和管理任务。

点击右上角的 个人头像 可用于查看:

解释1Working from Home

GitHub 的 “Working from Home” 功能是一个用户状态设置, 例如,当用户设置自己的状态为“在家工作”时,其他人在提及该用户、分配任务或请求审查时,GitHub 会显示该用户当前的状态,提示他们可能的响应时间或可用性有限。这有助于团队成员在需要协作或沟通时做出合理的预期和安排。

总的来说,GitHub 的“Working from Home”功能是一个有用的工具,可以帮助用户在远程工作或有特殊工作安排时,向团队成员传达自己的工作状态和可用性。

解释2RepositoriesGists的区别

    • Repositories(仓库):主要用于存储项目的全部源代码以及与之相关的文件(如文档、图片等)。它是版本控制的核心,可以包含多个文件和文件夹,支持版本历史、分支、标签、Pull Request(拉取请求)等功能。仓库通常用于完整的软件开发项目。
    • Gists(代码片段):主要用于分享较小的代码片段或文本。Gist 更加轻量级,通常只包含单个文件,不支持版本历史、分支或 Pull Request。
  1. 结构和组织
    • Repositories:有复杂的目录结构,可以包含多个文件夹和文件,以及子模块等。
    • Gists:通常只包含单个文件,结构简单。
  2. 协作和版本控制
    • Repositories:支持多人协作,可以设置权限,进行分支管理,有完整的版本控制功能。
    • Gists:虽然可以进行编辑和版本控制,但不支持分支,协作功能较弱。

以上大概是主界面的主要内容了。

1.5 个人主页

点击Your profile可进入下面的个人主页:

1.6 一个具体的页面

具体的某个项目主页

分支、Add file、code下拉列表

简述上图中各部分的作用

  • 用户名:回到个人主页。
  • 仓库名:显示该仓库中的文件列表。
  • 文件列表(code):仓库的具体内容。
  • 问题(Isuues):用于BUG报告、功能添加、方向性讨论等,这些将以issue的形式进行管理。Pull Request时也会创建Issue。旁边显示的数字是当前处于open状态的issue数目。
  • 拉取请求(Pull requests):代码的更改和讨论都可以在此进行。指开发者在本地对源代码进行更改后,向 GitHub中 托管的Git仓库请求合并的功能。也可以向别人的仓库提出申请,请求对方合并。
  • 运行(Actions):免费的操作系统容器,用于线上自动化构建、测试等等。
  • 项目(Projects):当前仓库所在的项目。
  • 维基(Wiki):GitHub的维基,可用来管理自己的知识体系。任何人都能随时对一篇文章进行更改并保存,因此可以多人共同完成一篇文章。该功能常用在开发文档或手册的编写中,改版的历史记录也会被切实保存下来。
  • 安全(Security):仓库安全的相关设置。
  • 可视化(insights):仓库的统计信息的图表,包括
  • 设置(Setting):仓库的设置
  • 通知设置/订阅数(Unwatch):下拉列表,多种选项选择。该仓库的更新信息就会显示在用户的公开活动中。相当于“订阅”。
  • 收藏数(Start):相当于“收藏”该仓库。用户可以在Star标记的列表中找到该仓库
  • 分支/复制数(Fork):代表该仓库被Fork至各用户仓库的次数。Fork相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中时,可以pull request,这样原项目的作者就可以将你修改的东西合并到原项目的主分支上去,这样你就为开源项目贡献了代码,开源项目就会在大家共同的努力下不断壮大和完善。

几个概念的辨析

  • branch VS tag

    • branch:在Git中,每个仓库都有一个主分支,通常命名为master。这是一个特殊的分支,因为它代表了项目的主线,也是默认的分支。
      • 其他分支,如开发分支、测试分支、功能分支、紧急修复分支等,是从主分支分离出来的。它们允许多个开发人员并行地开发不同的功能,而不会影响主分支。
      • 对于其他分支,可以在其上进行实验性开发,并在它们完成和稳定后,合并到主分支。在合并前,还可以对其他分支进行代码评审和测试。
      • 因此,主分支和其他分支的主要区别在于:主分支是项目的主线,它代表了项目的当前状态,而其他分支则是对项目进行实验性开发的地方。
    • tag:标签是指项目中某个特定版本的一个标记,用于标识项目的重要节点,例如发布版本或者里程碑。标签可以附加到任意的提交对象上,通常用于标记项目的稳定版本。
    • Git 中 在哪个branch 打tag有关系吗
      • 其实要取得不同的branch的tag,只需要在相应的分支上打tag就行了。这样的tag就唯一对应了不同的分支。例如,你在master上打了tag为v1,在某个branch上打了tag为v2,则你取出v2代码的时候,自然就是对应的branch分支了。
    • 参考链接1:git tags 和 Branches的区别是什么呀,什么时候应该创建一个Tag? - halfbusy的回答 - 知乎
      参考链接2:【Git】Git中 tag 与 branch 的关系与使用 - CSDN
      参考链接3:git中tag和branch的区别,下载最新代码是下载主分支还是最新的tag - CSDN
  • Isuues VS Pull requests

    • Issues功能用于讨论问题,提交使用问题、提出一些建议或者想法。
    • Pull request是指你想参与别人的项目,或想改进别人的项目,改进后需要提交申请。通俗的说,就是自己修改了代码,希望合并到别人的Repository(仓库)中,一般有如下四个步骤:
      • 先fork别人的仓库,即拷贝一份,生成一个自己的Repository,不会有人让你直接改修原仓库的。
      • clone到本地分支,通过修改、commit、push等操作后,将修改的内容,提交到自己仓库。
      • 发起 pull request 给原仓库,让他看到你修改的bug或者改进。
      • 原仓库作者查看你提交的内容,如果是正确的话,就会融合(merge)到他自己的项目中。
  • tag VS releases

    • tag:在一个项目中,我们可能需要阶段性地发布一个版本,比如 V1.0、V1.0.2、V3.2 Beta 之类的,Git的标签可以满足这个需求。
    • releases:GitHub的releases是 2013 年发布的新功能,旨在协助软件开发者分发新版本给用户。
    • 标签是Git中的概念,而releases则是Github、码云等源码托管商所提供的更高层的概念。Git本身是没有releases这个概念,只有tag。两者之间的关系则是,release基于tag,为tag添加更丰富的信息,一般是编译好的文件。(Tag适用于标记重要的提交点,而Release适用于正式发布软件版本)
    • 参考连接:九、Git tag 和 GitHub releases - CSDN
  • Wiki VS Readme

    • Wiki适用于需要详细文档管理的场景,如技术文档、操作手册等。由于支持版本控制和协作功能,Wiki非常适合团队成员之间的文档共享和更新。
    • Readme则更适合作为项目的入门指南和基本介绍。它通常包含项目的概述、安装步骤、使用方法等信息,帮助用户快速了解项目的基本情况和如何开始使用‌ 。
    • Wiki在权限管理上有所限制,默认只有管理员和贡献者可以修改和提交更改,普通用户无法直接推送更改到Wiki仓库。 README则通常对所有贡献者开放,可以自由编辑和更新,因为它主要是项目的基本信息介绍,不需要严格的权限控制‌。
  • Insights
    • 是 GitHub 提供的一款官方可视化工具,通过一系列图表和数据分析,用户可以清晰地看到项目的进展和各个贡献者的贡献。
    • GitHub Insights提供的自定义报告功能非常强大。管理员可根据团队的具体需求定制各类报告,例如代码提交频率的变化趋势、特定时间段内的拉取请求处理情况、不同贡献者之间的工作量对比等。这些报告可以帮助团队识别潜在的瓶颈和问题,从而更好地分配资源和调整工作计划,提高整体效率。
  • Actions

1.7 个人设置界面

点击右上角图像列表中的Settings可进入个人页面设置。

GitHub用户资料配置 - 哔哩哔哩

GitHub 小白入门(一)初识界面 - CSDN

2 Github使用

一台主机github多账号登陆 - 工程师焱记的文章 - 知乎

4 使用Github(Github Issues) - 哔哩哔哩

github仓库的fork与pull request - 哔哩哔哩