我在github上有一个仓库,其中包含一个已部署到两个不同域的Web应用程序。该应用程序在这里和那里有轻微的逻辑分支,具体取决于部署到哪个域而表现不同。
到了要点,我想将其拆分为两个单独的存储库,每个域一个。
Github不允许我将其加入同一个组织。搜索“ git重复仓库”建议我应该克隆并镜像推送它,但这似乎是为了使两个仓库保持同步,这是我不想做的。
最好的方法是什么?如果可能,我想将旧的提交历史记录保留在新副本中。
Answers:
只需创建一个新的存储库,然后从您的工作副本中推送至该存储库即可:
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
。
push
明确地对其进行更新,否则任何一个存储库都不会更新,并且“新”存储库将不会显示与旧存储库的任何关系。
git push --all origin
如果您不需要分叉关系(例如,出于某种原因想要某种解耦的备用存储库),则将存储库复制为Google发现的轮廓,幼虫的答案就可以了。
如果您确实想使其成为叉子,请联系Github支持人员(support@github.com或https://github.com/support),他们将为您在同一组织中创建一个叉子。(他们对此也不是很挑剔,您只需为存储库提供一个备用名称,因为帐户中的存储库名称必须是唯一的。)
更新:用户史蒂夫·赖斯在下面的评论中报告,GitHub支持表示该支持当前不会/不再在您的帐户中设置第二个分支。
GitHub最近发布了一篇文章,介绍了将回购分叉到同一帐户的可能选择。您可以在此处阅读该文章。
使用页面顶部+菜单上的Github的Import Repository选项,或直接打开
这将创建一个新的存储库,其中包含复制的存储库的确切内容。缺点(与Iarsks回答的git命令相同)是,它不算作Github的分支。
另一种方法是将要复制的原始仓库添加为当前仓库的远程仓库。
#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
git clone --bare
和git push --mirror
选项正是您想要的。这不会使两个存储库保持同步。但是它确实保留了所有内容,包括所有分支,标签等。只需在临时目录中进行复制即可。然后,直接从您的远程目录中克隆新副本。