关于github:Git问题实际上是Git克隆吗?

Are Git forks actually Git clones?

我一直听到有人说他们在用Git输入代码。git"fork"听起来像git"clone",加上一些(毫无意义的)放弃未来合并的心理意愿。Git中没有fork命令,对吧?

Github通过将信件钉在叉上使叉更加真实。也就是说,您按下fork按钮,稍后,当您按下pull请求按钮时,系统足够智能,可以向所有者发送电子邮件。因此,围绕知识库的所有权和权限来说,这有点像舞蹈。

是/否?对Github向这个方向扩展Git有什么不安吗?或者有关于Git吸收功能的传言吗?


在Github上下文中,fork不扩展Git。< BR>它只允许在服务器端进行克隆。

在本地工作站上克隆Github存储库时,除非显式声明为"贡献者",否则无法向上游存储库进行贡献。这是因为您的克隆是该项目的单独实例。如果您想为项目做出贡献,可以使用forking,方法如下:

  • 在您的Github帐户上克隆该Github存储库(即"fork"部分,服务器端的克隆)
  • 向GitHub存储库提交提交(它在您自己的GitHub帐户中,因此您有权推送它)
  • 向原始Github存储库发出任何有趣的贡献信号(这是通过您在自己的Github存储库上所做的更改而得到的"拉请求"部分)

另请检查"协作Github工作流"。

如果要保持与原始存储库(也称为上游)的链接,则需要添加引用该原始存储库的远程链接。< BR>请参见"Github上的源站和上游站有什么区别?"

fork and upstream

而且,有了Git2.20(2018年第4季度)和更多,从Fork获取数据的效率更高,有了Delta Islands。


I keep hearing people say they're forking code in git. Git"fork" sounds suspiciously like git"clone" plus some (meaningless) psychological willingness to forgo future merges. There is no fork command in git, right?

"分叉"是一个概念,不是任何版本控制系统特别支持的命令。

最简单的分叉是分支的同义词。每次你创建一个分支,不管你的风投是什么,你都会"分叉"。这些分叉通常很容易合并在一起。

你所说的那种分叉,一个单独的一方拿走完整的代码副本,然后走开,必然发生在像颠覆这样的集中系统中的VCS之外。像Git这样的分布式VCS对分叉整个代码库和有效启动新项目有更好的支持。

Git(而不是GitHub)本机支持通过多种方式"分叉"整个回购(即克隆它):

  • 克隆时,会为您创建一个名为origin的远程设备。
  • 默认情况下,克隆中的所有分支都将跟踪它们的origin等价物。
  • 从原来的项目中提取和合并更改非常简单

Git可以将更改贡献回fork的源代码,就像请求来自原始项目的某人从您那里获取更改一样简单,或者请求写访问权将更改推回到您自己那里。这是Github使之更容易和标准化的部分。

Any angst over Github extending git in this direction? Or any rumors of git absorbing the functionality?

没有焦虑,因为你的假设是错误的。GitHub"扩展"了Git的分叉功能,它有一个漂亮的GUI和一种标准化的发出拉请求的方式,但它没有向Git添加该功能。完全回购分叉的概念在一个基本的层次上被直接烘焙到分布式版本控制中。您可以在任何时候放弃Github,继续推/拉您"分叉"的项目。


是的,福克是克隆人。它的出现是因为,没有别人的许可,你不能把它推到别人的拷贝上。他们为您(fork)制作了一份副本,您也可以在其中获得写许可。

将来,如果实际所有者或其他用户使用类似于您所做更改的fork,他们可以将其拉回到自己的存储库中。或者,您可以向他们发送"拉请求"。


在本文中,"fork"的意思是"复制它们的代码,以便我可以添加自己的修改"。没什么好说的。每个克隆本质上都是一个分叉,决定是否从分叉中提取更改取决于原始克隆。


克隆涉及将git存储库的副本复制到本地计算机,而forking则是将存储库克隆到另一个存储库中。克隆仅供个人使用(尽管将来可能会发生合并),但通过分叉,您正在复制并打开一个新的可能的项目路径。


当您决定为某个项目做出贡献时,就会完成分叉。您将复制整个项目及其历史日志。此副本完全在您的存储库中进行,一旦您进行了这些更改,就会发出一个请求。现在由源代码的所有者来接受请求并将更改合并到原始代码中。

git clone是一个实际的命令,允许用户获取源文件的副本。Git克隆[url]这应该在您自己的本地存储库中创建[url]的副本。


我认为fork是另一个存储库的副本,但需要修改您的帐户。例如,如果直接在本地克隆其他存储库,则远程对象源站仍在使用从中克隆的帐户。您不能提交和贡献代码。它只是代码的一个纯拷贝。否则,如果您分叉一个存储库,它将使用您的github帐户中的帐户设置更新来克隆repo。然后在您的帐户上下文中克隆repo,您可以提交代码。


除了克隆是从服务器到您的机器,而分叉是在服务器本身上创建一个副本之外,一个重要的区别是,当我们克隆时,实际上得到了所有分支、标签等。

但是当我们分叉时,实际上只在主分支中获取当前的文件,除此之外什么都没有。这意味着我们没有得到其他分支等。

因此,如果您必须将某个内容合并回原始存储库,那么它是一个存储库间合并,并且肯定需要更高的权限。

fork不是git中的命令;它只是github实现的一个概念。记住,Git是为在对等环境中工作而设计的,不需要将资料与任何主拷贝同步。服务器只是另一个对等机,但我们将其视为主副本。


这里对什么是"叉子"有一个误解。实际上,fork只不过是一组每用户分支。当您推到一个fork时,实际上是推到原始存储库,因为这是唯一的存储库。

您可以通过推到一个fork,注意提交,然后转到原始存储库,使用提交ID来尝试这个方法,您将看到提交"在"原始存储库中。

这很有道理,但远不明显(我最近才偶然发现)。

当john forks repository superproject实际发生的情况是,源存储库中的所有分支都以"john.master"、"john.new-gui-project"等名称进行复制。

Github"隐藏"了"约翰",给了我们一个假象,我们在Github上有自己的存储库"副本",但我们没有,甚至不需要。

所以我的fork的分支"master"实际上被命名为"korporal.master",但是github用户界面从未透露过这一点,只显示了"master"。

不管怎样,这几乎是我认为发生在引擎盖下的事情,基于我最近所做的事情,当你思考它时,它是非常好的设计。

因此,我认为微软在其Visual Studio团队服务产品中实现git forks非常容易。


简单来说,

当您说要分叉一个存储库时,基本上是在您的GitHub帐户中的GitHub ID下创建原始存储库的副本。

当您说要克隆存储库时,您将直接在系统(PC/Laptop)中创建原始存储库的本地副本,而不在GitHub帐户中创建副本。