我在github上有一个repo,它包含一个部署到两个不同域的Web应用程序。该应用程序在这里和那里有轻微的逻辑分支,取决于它部署到哪个域。
我想把它分成两个单独的回购,每个域一个。
Github不会让我把它分成同一个组织。正在搜索" git duplicate repo"建议我应该克隆并镜像推送它,但这似乎是为了保持两个回购同步,我不想做。
最好的方法是什么?如果可能的话,我想在新副本中保留旧的提交历史记录。
答案 0 :(得分:87)
只需创建一个新的存储库并从工作副本中推送到它:
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
相同。
答案 1 :(得分:8)
如果您不需要fork关系(例如,您出于某种原因需要某种解耦的备用仓库),请将您的仓库重新复制为轮廓,并通过Google发现和larsks的答案。
如果你做想要成为一个分支,请联系Github支持(support@github.com或https://github.com/support),他们将在同一个组织中为你创建一个分支。 (他们也不会挑剔这个,你只需要为回购提供替代名称,因为帐户中的回购名称必须是唯一的。)
更新:用户Steve Rice在下面的评论中报告GitHub支持声明支持目前/不再设置您帐户中的第二个分支。您仍然可以尝试询问他们,因为支持员工可能会这样做 - 但这可能也是一项政策变化,阻止他们这样做。
答案 2 :(得分:5)
这将创建一个新的存储库,其中包含复制的存储库的确切内容。缺点是它不算作Github的分支。
答案 3 :(得分:4)
另一种方法是将要复制的原始仓库添加为我们当前仓库的远程仓库。
#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
答案 4 :(得分:0)
替代解决方案:
创建一个新组织并将其分支。 如果仓库是私人的,那么它将在新组织中也保持私人状态。 然后,您可以访问外部开发人员或任何想要分叉存储库的人,他们可以将PR恢复到原始存储库。
答案 5 :(得分:0)
我知道这是一个非常古老的线程,但我偶然发现了它以寻找答案并随后找到了更好的方法:
制作你想要复制模板仓库的仓库。它是存储库设置顶部的一个复选框。执行此操作后,在代码按钮旁边的存储库顶部将有一个标有“使用此模板”的绿色大按钮。单击它,它将在您想要的任何帐户中复制该存储库。
答案 6 :(得分:-2)
你不能只复制本地文件夹,删除git stuff:
rm -rf .git*
然后在该文件夹中创建一个新的存储库?似乎更清洁,更容易。