GitHub 中的项目与存储库

Posted

技术标签:

【中文标题】GitHub 中的项目与存储库【英文标题】:Project vs Repository in GitHub 【发布时间】:2017-03-23 10:23:02 【问题描述】:

在 GitHub 中,项目(可以在存储库中创建)和存储库之间的概念区别是什么?

我在 SO 中看到了几个类似的问题(here、here 和 here),但没有一个解释什么是 GitHub 项目、什么是 GitHub 存储库以及何时使用它们中的每一个.

如果有人能解释每个术语,并提供一个何时使用/创建每个术语的示例,我将不胜感激。例如,如果我有几个原型应用程序,它们都相互独立,我应该创建什么来以有组织的方式管理所有这些应用程序的源代码?

【问题讨论】:

一个 github 存储库只是一个可以存在文件和文件夹的“目录”。其他人可以创建自己的这个“目录”的副本并根据需要对其进行修改,然后请求将他们的更改放入主存储库。至于项目,我不确定,因为我从未使用过它们。 你说你看过类似的问题,但你真的读过你的第一个链接吗? “那是一个 gitorious,而不是 git 的事情。每个项目可以有多个存储库。”以及同一线程上的另一个答案“Git 没有项目之类的东西,只有存储库。”。如果您确实是指 github 项目,我建议您查看有关它的 github 文档help.github.com/articles/… @PeeHaa 是的,我做到了。第一句话说明了这一点:“这是一个 gitorious,而不是 git 的事情。每个项目可以有多个存储库。”。 对我来说,这谈论的是 Gitorius,而不是 GitHub。此外,它说在 Gitorious 中每个项目可以有多个存储库,但在 GitHub 中则相反。所以,如果您能解释一下这如何回答我的问题,我将不胜感激? 看到人们如此迅速地投反对票,却没有花时间阅读和消化所提出的问题,这是不公平的! 这应该有你需要的一切github.com/blog/… 【参考方案1】:

事实 1:项目和存储库在 GitHub 上始终是同义词。事实 2:不再是这种情况。

关于存储库和项目有很多混淆。在过去,用户和 GitHub 自己的文档几乎可以互换使用这两个术语。此处的一些答案和 cmets 反映了这一点,这些答案和 cmets 解释了这些术语之间的细微差异,以及何时首选一个。差异总是微妙的,例如就像问题跟踪器是项目的一部分,但不是存储库的一部分,这可能被认为是严格的 git 事物等。

没有了。

目前 repos 和项目是指具有独立 API不同种类的实体

https://developer.github.com/v3/repos/ https://developer.github.com/v3/projects/

从那时起,将 repo 称为项目不再正确,反之亦然。 请注意,它在官方文档中经常被混淆,不幸的是,一个已经被广泛使用的术语被选为新实体的名称,但情况就是这样,我们不得不忍受这种情况。

结果是 repos 和项目通常会混淆,每次阅读 GitHub 项目时,您都不得不怀疑它是否真的是关于项目或 repos。如果他们选择了其他名称或诸如“proj”之类的缩写,那么我们就可以知道所讨论的是新类型的实体,具有具体属性的精确对象,或者一般来说类似 repo 的投影类型的东西。

通常明确的术语是“项目委员会”

我们可以从 API 中学到什么

Projects API 文档中的第一个端点:

https://developer.github.com/v3/projects/#list-repository-projects

描述为:列出存储库项目。这意味着一个存储库可以有许多项目。所以这两个不可能是同一个意思。它包括项目被禁用时的响应


  "message": "Projects are disabled for this repo",
  "documentation_url": "https://developer.github.com/v3"

这意味着某些 repos 可以禁用项目。同样,当一个 repo 可以禁用项目时,这些就不一样了。

还有一些其他有趣的端点:

创建存储库项目 - POST /repos/:owner/:repo/projects 创建组织项目 - POST /orgs/:org/projects

但是有没有

创建用户项目 - POST /users/:user/projects

这导致我们另一个不同之处:

1.存储库可以属于用户或组织2。项目可以属于存储库或组织

或者,更重要的是:

1.项目可以属于存储库,但不能相反2。项目可以属于组织,但不能属于用户3。存储库可以属于组织和用户

另见:

https://help.github.com/articles/about-project-boards/

我知道这很令人困惑。我试图尽可能准确地解释它。

【讨论】:

在 Atlassian 的 Bitbucket 中,您可以创建包含一系列相关存储库的项目。 Github 有这个组织功能吗?我曾期望 Github Projects 是那样的东西,但显然不是。我似乎无法弄清楚如何在 Github 中使这个组织成为可能。我非常习惯了 Bitbucket,所以它可能只是一个学习曲线。 从某种意义上说,如果一个项目可以有多个存储库,对我来说会更有意义。我的印象是 GitHub 注意到它已经过时了,而不是进行彻底的重新设计,而是选择了一种解决方法并将其作为一件好事出售。顺便问一下,现在 GitHub 的所有者是谁?也许答案为为什么会发生这种情况提供了一些线索。只是大声思考。 我来到这个 SO 问题,假设回购是在项目内部创建的,而不是相反。现在我完全糊涂了。我的意思是,如果你开发一个新的操作系统,你不能让内核、编译器、实用程序等的存储库属于操作系统的“主项目”吗?如果您想做这样的事情,您是否应该创建一个组织帐户,以便“组织”实际上是“主项目”?我不明白。【参考方案2】:

GitHub 最近推出了一项名为Projects 的新功能。这提供了一个可视板,这是许多项目管理工具的典型特征:

GitHub 上记录的Repository:

存储库是 GitHub 的最基本元素。他们最容易 想象成一个项目的文件夹。一个存储库包含所有 项目文件(包括文档),并存储每个文件的 修订记录。存储库可以有多个协作者,并且可以 可以是公开的,也可以是私有的。

GitHub 上记录的Project:

GitHub 上的项目板可帮助您组织工作并确定工作的优先级。您可以为特定的功能工作、综合路线图甚至发布清单创建项目板。借助项目板,您可以灵活地创建适合您需求的自定义工作流程。

部分困惑在于,新功能 Projects 与上述文档中术语 project 的重载用法相冲突。

【讨论】:

所以我使用 Github 来存储我个人研究项目 A、B、C 等的代码。如果我理解正确,每个研究项目都会有自己的存储库吗?那么 A 得到一个存储库,B 得到一个存储库,C 得到一个存储库,等等? 当你 fork 一个 Repository 时,你的 fork 是否可以访问 Project board 的快照? 如何选择这个作为可接受的答案?只需复制粘贴所描述的内容。它可以被 OP 阅读,但人们想通过简单的例子来了解。【参考方案3】:

GitHub Repositories 用于存储您关心的所有文件、文件夹和其他资源。

Git Project : 它也是 Git Repository 中的资源之一,主要用途是用可视板管理项目。如果您在 Git Repository 中创建项目,它会创建一个类似于看板的可视板来管理项目。

这样,您可以在一个存储库中拥有多个项目。

【讨论】:

【参考方案4】:

一般来说,在 GitHub 上,1 个存储库 = 1 个项目。例如:https://github.com/spring-projects/spring-boot。但这不是硬性规定。

1 个存储库 = 许多项目。例如:https://github.com/donhuvy/java_examples

1 个项目 = 许多存储库。例如:https://github.com/zendframework/zendframework(1 个名为 Zend Framework 3 的项目有 61 + 1 = 62 个存储库,不信?让我们数一数 Zend Frameworks 的模块 + 主存储库)

我完全同意@Brandon Ibbotson的comment:

GitHub 存储库只是一个“目录”,文件夹和文件可以在其中 存在。

【讨论】:

感谢您的回复。但我不认为您对项目的定义是 GitHub 所称的项目,因为多个项目存储库的示例在这些存储库的“项目”选项卡中没有显示任何内容。你能详细说明一下吗? 其实使用 Zend Framework 的例子是完全错误的!根据 GitHub 的命名法,有一个名为“zendframework”的组织拥有许多存储库,其中一个也称为“zendframework”,框架的每个模块都有一个。 2017 年 11 月 9 日:1 个存储库 = 许多项目 的示例返回 404。 链接已损坏 就 GitHub 而言,这个答案与上面其他更流行的答案相冲突。【参考方案5】:

我理解的概念上的差异

一个项目可以包含许多相互独立的 repo,而同时一个 repo 可能包含许多项目。 存储库只是代码的存储位置,而项目可以是特定功能的任务集合。

这有意义吗?一个大的 repo 可以有许多项目同时由不同的人处理(许多不同的特性被添加到一个单体中),一个大的项目可能有许多单独的小 repo,但它们是同一个项目的一部分,它们相互交互其他 - 微服务?这是对您想做的事情的个人看法。

我认为 repo(存储)与项目(任务)是主要区别 - 如果我错了,请告诉我/解释!谢谢。

【讨论】:

【参考方案6】:

这是我个人对这个话题的理解。

对于一个项目,我们可以通过不同的存储库进行版本控制。对于存储库,它可以管理整个项目或部分项目。

关于您的项目(几个独立的原型应用程序)。您可以通过一个存储库或多个存储库管理项目,区别:

    由一个存储库管理。如果其中一个应用程序发生更改,则整个项目(所有应用程序)都将提交到新版本。

    由多个存储库管理。如果更改了一个应用程序,它只会影响管理该应用程序的存储库。其他存储库的版本未更改。

【讨论】:

【参考方案7】:

阅读对这个问题的回答让我得出结论,这两个术语是可以互换的,实际上没有人能够以清晰易懂的方式区分这两者!

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。【参考方案8】:

关于 git 词汇, Project 是实际内容(文件)所在的文件夹。 而 Repository (repo) 是 git 保存在 project 文件夹中所做的每次更改记录的文件夹。 但在一般意义上,这两者可以认为是相同的。 项目 = 存储库

【讨论】:

GitHub 项目是独立于 GitHub 存储库的功能。 你应该检查 Github 和它的新功能“项目”。

以上是关于GitHub 中的项目与存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Github 存储库中添加多个项目文件夹

github存储库中lib目录的含义

从 IDEA 将项目共享到 GitHub:如何将所有项目添加到存储库到名为“lab1”的分支中

协作者如何将他们的更改推送到我在 GitHub 中的存储库

将Github存储库导入PyCharm

GitHub API:贡献给的存储库