将github上的git repo复制/分支到同一组织


82

我在github上有一个仓库,其中包含一个已部署到两个不同域的Web应用程序。该应用程序在这里和那里有轻微的逻辑分支,具体取决于部署到哪个域而表现不同。

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

Github不允许我将其加入同一个组织。搜索“ git重复仓库”建议我应该克隆并镜像推送它,但这似乎是为了使两个仓库保持同步,这是我不想做的。

最好的方法是什么?如果可能,我想将旧的提交历史记录保留在新副本中。


1
实际上,git clone --baregit push --mirror选项正是您想要的。这不会使两个存储库保持同步。但是它确实保留了所有内容,包括所有分支,标签等。只需在临时目录中进行复制即可。然后,直接从您的远程目录中克隆新副本。
greatlysuperiorman

Answers:


103

只需创建一个新的存储库,然后从您的工作副本中推送至该存储库即可:

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


3
好吧,这些不会互相追踪,对吗?意味着它们成为两个单独的断开连接的存储库?这就是我想要的。
杰明格

3
除非您push明确地对其进行更新,否则任何一个存储库都不会更新,并且“新”存储库将不会显示与旧存储库的任何关系。
larsk 2014年

谢谢!看起来这就是我需要的。
杰明格

3
您还可以推动所有分支机构:git push --all origin
Marius 2015年

这对我有用
Enfors,

15

如果您不需要分叉关系(例如,出于某种原因想要某种解耦的备用存储库),则将存储库复制为Google发现的轮廓,幼虫的答案就可以了。

如果您确实想使其成为叉子,请联系Github支持人员(support@github.com或https://github.com/support),他们将为您在同一组织中创建一个叉子。(他们对此也不是很挑剔,您只需为存储库提供一个备用名称,因为帐户中的存储库名称必须是唯一的。)


更新:用户史蒂夫·赖斯在下面的评论中报告,GitHub支持表示该支持当前不会/不再在您的帐户中设置第二个分支。

GitHub最近发布了一篇文章,介绍了将回购分叉到同一帐户的可能选择。您可以在此处阅读该文章


4
联系支持人员,他们的回应是:“目前,一个帐户不能在同一网络中拥有两个回购协议。” 他们建议改为设置镜像存储库
史蒂夫·赖斯

啊,真烂。抱歉,我不知道他们已经更改了政策:(
Nevik Rehnel 2014年

10

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

https://github.com/new/import

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


您如何无法使该选项起作用?我刚刚对其进行了重新测试,并通过两个简单步骤对其进行了操作。或者,在github中创建本地存储库,然后在此处使用导入功能,例如github.com/sarob/mytest/import
sarob

可能与我们的GHE vs github.com有关,但在那儿不起作用。
serraosays

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

1

替代解决方案:

创建一个新组织并将其分支。如果仓库是私人的,那么它将在新组织中也保持私人状态。然后,您可以访问外部开发人员或任何想要分叉存储库的人,他们可以将PR恢复到原始存储库。


-2

您能否只复制本地文件夹,删除git的东西:

rm -rf .git*

然后在该文件夹中创建一个新的存储库?看起来更干净,更轻松。


2
删除./.git/对OP声明的意图没有帮助,“如果可能,将旧的提交历史记录保留在新副本中”。
MarkHu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.