在Github上能否“fork一个fork”?

76

我目前正在从我一直在工作的一个框架中分叉出(fork)一个项目。

这个项目本意是要非常通用,但现在我需要再次为我的客户分叉代码库。

此时,我已经为我的客户创建了一个自定义分支,但我更想拥有一个独立的存储库。

  • 是否可能“分叉一个分叉”?
  • 如果不行,我还有哪些替代方案?

情况概述:

  • 框架存储库(原始)
    • 通用应用程序存储库(分叉)
      • (尚未)客户存储库(应用程序的分叉)

注意:当在 Github 中尝试“分叉一个分叉”时,您将收到一条通知,告诉您已经分叉了该项目:

显示无法再次分叉已经被分叉的项目的图像


我不明白为什么这不可能,你尝试过了吗? - Felix Kling
哦,好的(:()。这个项目是否也需要在GitHub上被称为一个分支很重要吗(可能是因为会有Pull Request)?否则,您可以克隆他们的“真正的”存储库,并稍后将其添加为GitHub项目... - Felix Kling
我明白了...无论如何,我建议联系GitHub支持(如果您还没有这样做)。 - Felix Kling
啊...看起来你的问题是另外一个。你想创建自己项目的派生版本吗?还是想从一个项目创建第二个派生版本呢?(因为一般情况下,对于一个已经被派生过的项目再次进行派生是可以做到的)。 - Felix Kling
我不确定这是否是正确的替代方案,因为它取决于你的框架。如果你的通用应用程序没有修改你的框架,那么你的框架应该是你的应用程序的子模块,而不是分叉/克隆它。通过子模块化,你可以保持项目的分离,但仍然保持相同。 - dieend
显示剩余4条评论
5个回答

48

现在这是完全可行的。您只需前往要分叉的仓库,像平常一样点击“分叉”即可。但如果您的帐户中已经有该存储库的不同分叉,则此方法将无效。如果存在,则必须将其删除。

iFreilicht 在评论中回答了这个问题。

既然这是正确的答案,最好将其突出显示。


20
这不是正确的答案,因为此人并不想删除他人创建的存储库,而是想在其修改后再次进行分支派生。 - axkibe

38

我联系了GitHub支持团队,询问此“问题”,他们确认这是不可能的。而且,未来很不可能实现这样的功能。


9
我们有一个明确的场景,这个功能是“必需”的。在2015年:Github是否仍然坚持不支持这种使用情况? - WestCoastProjects
10
现在这很容易实现。你只需前往想要派生的分支,像平常一样点击“fork”即可。但前提是你的账户里没有该仓库的其他派生分支。如果有的话,你需要先删除它。这里有一个例子:https://github.com/tmk/tmk_keyboard/network/members - iFreilicht
7
他们应该支持同时拥有原始仓库的分支和另一个分支的分支。为了使其正常工作,他们只需要跟踪父仓库的 ID。 - Andrew
7
两年后,仍然不可能。今天我还遇到了同样的问题。在我的情况下,原始项目已经停止,因此创建原始项目的克隆版本以进行维护是可以的。但是如果我想为同一项目的两个分支做出贡献呢? - Peter Gloor
5
同样的问题。这个设计充其量是非常值得质疑的,根本没有任何意义。 - Shital Shah
三年过去了,仍然不可能。重命名一个派生的存储库也没有帮助。 - Andry

7

简短回答:是和否。

对于单个账户而言,不行。因为你无法创建两个同名的仓库(分支也会有相同的名称)。

对于多个账户而言,是可以的。你可以为你的第二个分支建立一个组织。


@Korakter,这似乎是问题所在:原始项目是个人的,fork 是组织的。第三个应该是组织的... - Aron Rotteveel
1
没问题:只要第二个和第三个仓库进入不同的组织,就可以了。 - KingCrunch
然而,问题仍然存在;我不想为此创建另一个组织帐户,因为从技术上讲它仍然属于同一组织,并且这些是付费帐户。 - Aron Rotteveel
2
你应该使用分支,而不是派生。 - Tekkub
@Koraktor: "无法创建同名的两个仓库(分叉始终具有相同的名称)"。你不能在“管理”>“设置”>“仓库名称”中重新命名仓库吗? - XP1
“forks always have the same name” - 所以如果您重命名第一个 fork,这应该可以工作。但是重命名(如 @XP1 建议的那样)似乎不足以创建一个新的 fork。 - Vineet

0

现在,有一个下拉箭头,你可以选择基本存储库 下拉箭头


1
你能详细说一下在哪里找到这个吗? - cormacncheese
是的,请详细说明一下,您添加的附件不可见。 - Emmanuel Mahuni

0
我使用分支来跟踪不同的分叉。我主要将Github用作我的本地存储库的在线版本,与他人共享。所以我的使用情况可能不是你想要的。然而,我会概述一下我是如何做的,以防有人觉得有用。
简而言之:以下是一个示例,代码库同时跟踪了synergy-core和barrier,它们都是同一个存储库的分叉。
我为这些分叉设置了不同的远程仓库。
$ git remote -v
barrier gh:debauchee/barrier.git (fetch)
barrier gh:debauchee/barrier.git (push)
synergy gh:symless/synergy-core.git (fetch)
synergy gh:symless/synergy-core.git (push)

gh只是.ssh/config中github的快捷方式。
然后,我有不同的分支,根据远程名称跟踪不同的分叉。
$ git branch -vv
  barrier 653e4bad [barrier/master] Merge pull request #1067 from cryzed/fix/server-preserve-focus
* master  653e4bad [origin/master] Merge pull request #1067 from cryzed/fix/server-preserve-focus
  synergy cfe20bea [synergy/master] Change error priority based on param (#7279)

我现在可以拉取所有的更改并保持它们更新。我可以将分支推送到Github,并让人们通过在我的存储库中切换分支来访问被跟踪的分叉。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接