如果我分叉一个托管在 github 上的项目。我要叉掉所有的分支吗?我如何知道我的 fork 基于哪个分支?换句话说,哪个分支将被下载到我的 PC 上?
7 回答
这样想:
存储库[sitory]对应于团队跨一个或多个分支的协作工作。所有贡献者都有自己的副本。
主仓库的每个分叉对应一个贡献者的工作。fork 实际上是一个 Github(不是 Git)构造,用于在您的用户帐户中存储 repo 的克隆。作为一个克隆,它将包含您创建分叉时主仓库中的所有分支。
fork 和/或主 repo 中的每个分支都可以对应多种事物,具体取决于您想要的工作方式。每个分支可以引用项目的一个版本,但也可以对应于不同的开发渠道,例如修补程序或实验工作。
拉取请求(在 GitHub 生态系统中)对应于任务。每次我想向主存储库贡献一个独立的已完成任务时,我都会创建一个与该任务中所做的提交相对应的拉取请求。这些提交是从我的fork或我的分支拉到主 repo的。
提交是对代码的一组更改。这是关于 Git 最有趣的事情之一。您不传输文件,而是传输更改日志。
GitHub 上的所有分支都将复制到一个 fork 中。(显然,这不包括一开始从未推送到 GitHub 的分支。)
但是 fork 是 GitHub 到 GitHub 的操作;没有任何内容被复制到您的 PC 上。它与 Git clone不太一样。如果您要问“我克隆项目时复制了什么?”,请参阅git-clone(1).
Fork 是 GitHub 端的克隆(它克隆了所有内容)。
当您克隆一个 repo 时,您将获得该 repo 的所有历史及其所有分支。
尽管理论上您可以更改远程仓库的默认分支,但来自 GitHub 仓库的克隆主要是寻找主分支。意味着更改 GitHub 克隆将获得的“默认”分支,您需要重命名主分支。
如果你 fork 一个项目,你就是将整个项目的副本复制到你的 git hub 帐户中。你没有为你的电脑做任何事情
要在您的 PC 中制作副本,您必须克隆它并提取所有内容,您将获得该项目的所有分支和代码
如果您从 Github 网站创建项目的分支,您将获得上游项目的所有分支。
如果您从新创建的 fork 克隆到本地 PC,您origin的 PC 上的遥控器将指向 Github 上 fork 的 master 分支。
这可以很好地解释。您在 GitHub 上有一个中央存储库。每当您在个人计算机上对其进行克隆以进行一些更改时,主存储库的此本地克隆称为分叉。
分支有所不同,包含在 fork/repo 中。实际上,分支是您在不同开发阶段的工作。它们是在需要时创建的,以保存一组功能,为不同的用户提供访问权限,向客户展示站点等。
我想分享一个真实的例子,说明我们何时使用 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"
}
]