GitHub中的项目和仓库有何区别?

357
在GitHub中,仓库(repository)与项目(project)的概念有何不同?
我曾经看到过几个类似的问题(例如这里这里这里)都没有解释GitHub项目和GitHub仓库的区别以及何时使用它们。
如果有人能够解释每个术语,并提供一个使用/创建每个项目的示例,我会非常感激。例如,如果我有几个独立的原型应用程序,我应该创建什么来以有组织的方式管理它们的源代码?

3
一个Github仓库就是一个“目录”,在其中可以存在文件和文件夹。其他人可以创建自己的“目录”副本并随意修改它,然后请求将其更改合并到主仓库中。至于项目,我不确定,因为我从未使用过。 - byxor
2
你说你看到了类似的问题,但你真的读过你第一个链接吗?“那是一个Gitorious,而不是Git的东西。你可以在一个项目中有多个存储库。”以及同一线程中的另一个答案:“Git没有项目,只有存储库。”如果你确实是指Github项目,我建议你查看关于它的Github文档:https://help.github.com/articles/tracking-the-progress-of-your-work-with-projects/ - PeeHaa
11
@PeeHaa是的,我做到了。第一句话就说明了这一点:“这是一个Gitorious,而不是一个Git东西。您可以在每个项目中拥有多个存储库。” 对我来说,这谈论的是Gitorious,而不是GitHub。此外,它说在Gitorious中,您可以在每个项目中拥有多个存储库,但在GitHub中情况恰恰相反。因此,我非常希望您能解释一下这如何回答我的问题? - carlossierra
8
人们往往会不加思考地点踩,而不愿意花时间去阅读和理解问题,这是不公平的! - carlossierra
3
这个链接包含你所需的一切:https://github.com/blog/2256-a-whole-new-github-universe-announcing-new-tools-forums-and-features#manage-your-ideas-with-projects。 - osowskit
显示剩余5条评论
8个回答

270

事实1:在GitHub上,“项目”和“仓库”一直是同义词。



事实2:现在不再是这样了。

关于“仓库”和“项目”,存在很多混淆。过去,用户和GitHub自己的文档几乎可以互换使用这两个术语。这反映在这里的一些答案和评论中,这些答案和评论解释了这些术语之间的微妙差异以及何时更喜欢其中一个。差异总是微妙的,例如问题跟踪器是项目的一部分,但不是仓库的一部分,这可能被认为是一个严格的git事情等。

现在不再是这样了。

目前,repos和projects指的是不同类型的实体,具有单独的API

从那时起,不再正确地称repo为project或反之亦然。 请注意,官方文档经常混淆,不幸的是已经广泛使用的术语被选择为新实体的名称,但这是事实,我们必须接受它。

其结果是repos和projects通常会混淆,每次阅读GitHub项目时,您都必须想知道它是否真的与项目有关还是与仓库有关。如果他们选择了其他名称或缩写,例如“proj”,那么我们就可以知道所讨论的是新类型的实体,具有具体属性的精确对象,或者是类似于仓库的项目类型的东西。

通常不含糊的术语是“项目面板”

我们可以从API中学到什么

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

被描述为:列出存储库项目。这意味着一个存储库可以有多个项目。因此,这两个术语不能意味着相同的事情。它包括如果禁用了项目的响应

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

这意味着某些仓库可能禁用了项目。同样,当一个仓库禁用了项目时,它们并不是相同的东西。

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

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

但是没有

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

这就带来了另一个区别:

1. 仓库可以属于用户或组织
2. 项目可以属于仓库或组织

或者,更重要的是:

1. 项目可以属于存储库但反过来不行
2. 项目可以属于组织但不能属于用户
3. 存储库可以属于组织和用户

另请参阅:

我知道这很令人困惑。我尽量解释得尽可能准确。


7
在Atlassian的Bitbucket中,您可以创建项目,该项目涵盖一组相关的存储库。Github是否具有此组织特性?我本来以为Github Projects就是这个东西,但它显然不是。我似乎无法弄清楚如何在Github中实现这种组织方式。我非常习惯于使用Bitbucket,所以可能只是一个学习曲线。 - Ungeheuer
4
以某种方式,如果一个项目可以拥有多个存储库,那对我来说会更有意义。我有一种印象,GitHub 注意到这已经过时了,而不是进行完全的重新设计,只是选择了一个变通方法,并将其作为一件好事出售。顺便问一下,现在谁是 GitHub 的所有者?也许答案可以解释为什么会发生这种情况。只是随口说说。 - Almir Campos
7
我来到这个stackoverflow的问题,认为仓库是在项目内创建,而不是相反。现在我很困惑。我的意思是,如果你要开发一个新的操作系统,难道不能将内核、编译器、实用工具等仓库归属于一个“主项目”,也就是操作系统吗?如果你想做这样的事情,难道就必须创建一个组织账户,以便“组织”实际上是“主项目”吗?我不明白。 - cesss
但是,@rsp,我可以在 GitHub 上的链接中看到创建用户项目的文档 https://docs.github.com/en/rest/projects/projects#create-a-user-project。 - Hemendr
还有一些关于“团队”、“问题”和“草稿”的复杂性。如果我错了,请纠正我,一个团队可以属于一个组织。一个仓库可以属于一个团队。一个用户可以属于一个团队。一个(子)团队可以属于一个团队。此外,与项目不能属于用户不同,一个项目可以属于一个团队。另外,问题可以属于仓库或项目,而草稿可以属于项目(但不是仓库),尽管它可以转换为问题。还有什么遗漏的吗? - M. Thompson
一个项目可以有多个存储库会更合理,而不是相反。比如,我的产品有两个微控制器,每个都有自己的存储库。 - undefined

179

GitHub最近推出了一个名为Projects的新功能。该功能提供了一个视觉面板,类似于许多项目管理工具:

Project

GitHub上记录的仓库

仓库是GitHub最基本的元素。可以将其想象为项目的文件夹。一个仓库包含所有的项目文件(包括文档),并存储每个文件的修订历史记录。仓库可以有多个协作者,并且可以是公共或私有的。

GitHub上记录的项目

GitHub上的项目板块帮助您组织和优先处理工作。您可以为特定的功能工作、全面的路线图甚至发布检查清单创建项目板块。使用项目板块,您可以灵活地创建适合自己需要的自定义工作流程。

部分混淆之处在于新功能“Projects”与上述文档中术语“project”的过度使用相冲突。


1
所以我正在使用Github来存储我的个人研究项目A、B、C等的代码。如果我理解正确的话,每个研究项目都会有自己的代码库?因此,A会有一个代码库,B会有一个代码库,C会有一个代码库,以此类推? - Plinth
当您分叉存储库时,您的分叉是否可以访问项目板的快照? - geominded
43
这个被选为采纳答案是如何确定的?只需复制粘贴所描述的内容即可。这可以被原帖作者理解,但人们想要用简单的例子来说明。 - Emil

29

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

Git项目:它也是Git仓库中的一种资源,主要用途是通过可视化面板来管理项目。如果在Git仓库中创建项目,则会创建一个类似看板的可视化面板来管理该项目。

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


9
一般来说,在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 Framework的模块和主仓库)
我完全同意@Brandon Ibbotson评论

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


感谢您的回复。但我认为您对项目的定义并不是 GitHub 所称的项目,因为多项目存储库的示例在“项目”选项卡中并没有显示任何内容。您能否详细说明一下? - carlossierra
5
实际上,使用 Zend Framework 的例子是完全错误的!根据 GitHub 的术语,有一个名为 "zendframework" 的组织拥有许多存储库,包括一个同样命名为 "zendframework" 的存储库和每个框架模块的一个存储库。 - igorcadelima
3
2017年11月9日:1个代码仓库包含多个项目的示例返回404错误。 - Bram Vanroy
1
链接已损坏 - Peyman Mohamadpour
3
就 GitHub 而言,这个答案与上面更受欢迎的答案存在冲突。 - Manohar Reddy Poreddy

7

在我理解中,概念上的区别在于:

  • 一个项目可以包含许多独立的代码仓库(repo),而同时一个 repo 可以包含很多不同的项目。
  • 代码仓库是存储代码的地方,而一个项目可以是特定功能任务的集合。

这样的解释有意义吗?一个大型 repo 可能同时有许多人在进行许多不同的项目工作(向单块结构添加许多不同的特性),一个大型项目可能拥有许多互相交互但又分开的小型仓库 - 微服务?这是个人对你想要做的事情的看法。

我认为 repo(存储)和 project(任务)是主要的区别 - 如果我错了,请告诉我/解释一下!谢谢。


2
阅读这个问题的回答,我得出的结论是这两个术语可以互换使用,没有人真正成功地以一种清晰易懂的方式区分它们!

请在您的回答中提供更多细节。目前的写法让人难以理解您的解决方案。 - Community
这是不正确的。在Github上,项目和仓库绝不是可以互换的术语。 - madacoda
@madacoda,那么请随意发表回答,并用自己的话清晰地作出回应。 - Andrew S

1
这是我对该主题的个人理解。
对于一个项目,我们可以通过不同的代码库来进行版本控制。而对于一个代码库,它可以管理整个项目或部分项目。
关于您的项目(几个独立的原型应用程序),您可以通过一个代码库或多个代码库来管理项目,区别在于:
1. 通过一个代码库进行管理。如果其中一个应用程序发生更改,则整个项目(所有应用程序)将被提交为新版本。 2. 通过多个代码库进行管理。如果一个应用程序发生更改,它只会影响管理该应用程序的代码库。其他代码库的版本不会发生变化。

-3
关于git术语,项目是实际内容(文件)所在的文件夹。 而代码库(repo)是git记录每个更改的文件夹,是在项目文件夹中进行的。 但从一般意义上讲,这两者可以被认为是相同的。项目=代码库

GitHub 项目是 GitHub 仓库的一个独立功能。 - BenMorel
你应该检查Github及其新功能“Projects”。 - Ishaan Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接