140

如果我分叉一个托管在 github 上的项目。我要叉掉所有的分支吗?我如何知道我的 fork 基于哪个分支?换句话说,哪个分支将被下载到我的 PC 上?

4

7 回答 7

167

这样想:

存储库[sitory]​​对应于团队跨一个或多个分支的协作工作。所有贡献者都有自己的副本。

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

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

取请求(在 GitHub 生态系统中)对应于任务。每次我想向主存储库贡献一个独立的已完成任务时,我都会创建一个与该任务中所做的提交相对应的拉取请求。这些提交是从我的fork或我的分支拉到主 repo的。

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

于 2012-11-15T17:44:01.000 回答
47

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

但是 fork 是 GitHub 到 GitHub 的操作;没有任何内容被复制到您的 PC 上。它与 Git clone不太一样。如果您要问“我克隆项目时复制了什么?”,请参阅git-clone(1).

于 2011-02-15T21:23:35.910 回答
10

Fork 是 GitHub 端的克隆(它克隆了所有内容)。
当您克隆一个 repo 时,您将获得该 repo 的所有历史及其所有分支。

尽管理论上您可以更改远程仓库的默认分支,但来自 GitHub 仓库的克隆主要是寻找主分支。意味着更改 GitHub 克隆将获得的“默认”分支,您需要重命名主分支。

于 2011-02-15T21:23:17.530 回答
4

如果你 fork 一个项目,你就是将整个项目的副本复制到你的 git hub 帐户中。你没有为你的电脑做任何事情

要在您的 PC 中制作副本,您必须克隆它并提取所有内容,您将获得该项目的所有分支和代码

于 2016-02-28T07:51:14.450 回答
2

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

如果您从新创建的 fork 克隆到本地 PC,您origin的 PC 上的遥控器将指向 Github 上 fork 的 master 分支。

于 2011-02-15T21:24:40.010 回答
2

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

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

于 2018-01-31T10:53:12.747 回答
1

我想分享一个真实的例子,说明我们何时使用 Branches 以及何时使用 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 用法: 现在我们必须对我们的包做一些小把戏,所以我们通过一个 fork 创建生产包的克隆。可以更新 composer.json 文件以指向现在位于用户或组路径的分叉

所以我们将在https://github.com/yardpenalty/mypackage.git

并称之为https://github.com/yardpenalty/yards/mypackage.git

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

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

]

于 2019-03-15T16:43:20.240 回答