如果我分叉一个托管在github上的项目。我分叉所有分支吗?我怎么知道我的fork基于哪个分支?换句话说哪个分支将下载到我的电脑上?
答案 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
命名为https://github.com/yardpenalty/yards/mypackage.git
现在,我们可以更新我们的 composer.json 文件,使其指向我们“存储库”中的该程序包:[这样的数组就走了!
{
"type": "github",
"url": "https://github.com/yardpenalty/yard/mypackage.git"
}
]