97

我在 github 上有一个存储库,其中包含一个部署到两个不同域的 Web 应用程序。该应用程序在这里和那里有轻微的逻辑分支,根据它部署到的域,其行为会有所不同。

到了我想将其拆分为两个单独的存储库的地步,每个域一个。

Github 不会让我将它分叉到同一个组织中。搜索“git duplicate repo”表明我应该直接克隆并镜像推送它,但这似乎是为了让两个存储库保持同步,我不想这样做。

解决这个问题的最佳方法是什么?如果可能的话,我想在新副本中保留旧的提交历史。

4

7 回答 7

115

只需创建一个新存储库并从您的工作副本推送到它:

git clone git@github.com:me/myrepo-original
cd myrepo-original
git remote set-url origin git@github.com:me/myrepo-new
git push origin master

现在您有了一个新的存储库,myrepo-new它与myrepo-original.

于 2014-03-31T17:13:08.840 回答
19

如果您不需要分叉关系(例如,无论出于何种原因,您想要某种解耦的备用存储库),将存储库复制为您的 Google 查找和 larsks 答案的大纲就可以了。

如果你确实想把它做成一个分支,请联系 Github 支持(support@github.com 或https://github.com/support),他们会在同一个组织中为你创建一个分支。(他们对此也不挑剔,您只需为 repo 提供一个替代名称,因为帐户中的 repo 名称必须是唯一的。)


更新:用户 Steve Rice 在下面的评论中报告说 GitHub 支持表示支持当前/不再在您的帐户中设置第二个分支。

GitHub 最近发布了一篇关于将 repo 分叉到同一帐户的可能替代方案的文章。你可以在这里阅读那篇文章

于 2014-03-31T17:15:30.160 回答
16

使用页面顶部+菜单上的Github 的Import Repository选项或直接打开

https://github.com/new/import

这将创建一个新的存储库,其中包含复制的存储库的确切内容。缺点(与Iarsks 回答的 git 命令相同)是它不能算作 Github 的分支。

于 2018-06-12T16:55:24.870 回答
5

另一种方法是将要复制的原始仓库添加为我们当前仓库的远程仓库。

#create a new repo in the org1 organization called myrepo-new

在本地终端中,运行:

git clone git@github.com:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master
于 2015-07-07T11:53:29.750 回答
4

我知道这是一个超级旧的线程,但我偶然发现它寻找答案并随后找到了更好的方法:

制作要复制模板 repo 的 repo。它是存储库设置顶部的复选框。完成此操作后,在代码按钮旁边的代码库顶部将有一个标有“使用此模板”的绿色大按钮。单击它,它将在您想要的任何帐户中制作回购的副本。

于 2021-03-26T22:14:38.923 回答
2

替代解决方案:

创建一个新组织并在那里分叉。如果 repo 是私有的,它也将在新组织中保持私有。然后,您可以授予外部开发人员或您想要的任何人访问分叉存储库的权限,他们可以将 PR 提高回原始存储库。

于 2019-01-31T10:53:00.173 回答
0

您可以将第一个存储库标记为模板(在设置中),然后在创建新存储库时“使用”该模板存储库。它不完全是一个分叉,但在某些方面在功能上是等效的。

于 2022-02-03T16:12:00.300 回答