github上fork和branch之间的区别

时间:2011-02-15 21:16:50

标签: github branch git-branch git-fork

如果我分叉一个托管在github上的项目。我分叉所有分支吗?我怎么知道我的fork基于哪个分支?换句话说哪个分支将下载到我的电脑上?

7 个答案:

答案 0 :(得分:131)

这样想:

repo [sitory] ​​对应于团队在一个或多个分支机构中的协作工作。所有贡献者都有自己的副本。

主回购的每个 fork 对应于贡献者的工作。 fork实际上是一个Github(而不是Git)构造,用于在您的用户帐户中存储repo的克隆。作为克隆,它将包含您进行分叉时主回购中的所有分支。

fork和/或主仓库中的每个分支可以对应多种内容,具体取决于您的工作方式。每个分支都可以引用项目的一个版本,但也可以对应不同的开发渠道,如修补程序或实验工作。

拉取请求(在GitHub生态系统中)对应于该任务。每次我想向主回购贡献一个孤立的完成任务时,我创建一个与该任务中的提交相对应的拉取请求。这些提交是从我的 fork 或我的分支提取到主要仓库

提交是对代码的一组更改。这是关于Git最有趣的事情之一。您没有传输文件,而是传输更改日志。

答案 1 :(得分:40)

GitHub上的所有分支都将被复制到一个分支中。 (显然,这不包括从未被推送到GitHub的分支。)

但是fork是一个GitHub到GitHub操作;什么都没有复制到您的PC。它与Git 克隆不完全相同。如果您想询问“克隆项目时复制了什么内容?”,请参阅git-clone(1)手册。

答案 2 :(得分:9)

Fork是GitHub上的一个克隆(它克隆了所有东西) 当您克隆回购时,您将获得所有回购的所有历史记录及其所有分支。

即使你理论上可以change the default branch of a remote repo,来自GitHub repo的克隆主要是寻找主分支。要更改GitHub克隆将获得的“默认”分支,您需要重命名主分支。

答案 3 :(得分:3)

如果您分叉一个项目,那么您将整个项目的副本复制到您的git hub帐户。你没有在你的电脑上做任何事情

要在你的电脑上制作副本,你必须克隆它并拉出所有的东西,你将得到所有的分支&该项目的代码

答案 4 :(得分:2)

如果您从Github网站创建一个项目分支,您将获得上游项目的所有分支。

如果您从新创建的分支机构克隆到本地PC,则PC上的origin遥控器将指向Github上分叉的主分支。

答案 5 :(得分:1)

这可以很好地解释。你在GitHub有一个中央存储库。每当您在个人计算机上对其进行克隆以进行某些更改时,主存储库的本地克隆称为fork。

分支是不同的,包含在fork / repo中。实际上,分支机构是您在不同发展阶段的工作。它们是在需要时创建的,用于保存一组功能,提供对不同用户的访问,向客户演示站点等。

答案 6 :(得分:0)

我想分享一个现实的例子,当我们使用分支机构和何时使用Forks

我们的商店中有GitLab,有时我们需要处理Laravel项目中的软件包。通常,当与实际的Laravel项目一起工作时,我们会创建一个分支并将更改推送到我们在本地VM开发环境中已经测试过的分支。

假设我们的项目位于

https://github.com/yardpenalty/mainproject.git

分支使用情况:

假设分支称为It_doesnt_matter

一旦按照我们想要的生产方式建立了分支机构,我们将最终推送到该分支机构,并创建合并请求,然后将其放入UAT进行测试。一旦测试通过了QC这些更改将合并到生产中。

It_doesnt_matter 分支中的合并现在已推送到主项目

https://github.com/yardpenalty/mainproject.git

比方说打包项目位于

https://github.com/yardpenalty/mypackage.git

请记住,主项目在生产中使用了此程序包,因此我们不能仅通过将其推入该程序包进行更改(其他原因)。假设某个Web开发人员必须编辑此程序包才能进行生产更改。

一个简单的分支也不起作用,因为如果不发布包等就看不到更改。

叉的用法: 现在是时候必须对我们的程序包进行一些欺骗了,因此我们可以通过fork创建生产程序包的副本。可以将composer.json文件更新为指向现在位于用户或组路径

的分支。

因此,我们将在https://github.com/yardpenalty/mypackage.git

中创建一个fork

命名为https://github.com/yardpenalty/yards/mypackage.git

现在,我们可以更新我们的 composer.json 文件,使其指向我们“存储库”中的该程序包:[这样的数组就走了!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]