如何复制一个git存储库?(无分叉)


117

我有两个存储库,我需要将整个存储库复制到另一个空存储库中,该空存储库与第一个存储库具有不同的访问级别。副本和母存储库不应链接在一起。

我是git的新手,如果有人可以帮助我,那就太好了。


5
不确定,但是我想您可以克隆它,然后使用git config remote.origin.url git://new.url/proj.git将remote.origin设置为您的新代表。
Rufinus

是的,我刚刚发布的链接具有类似的功能。
nbz 2011年

@rudinus我就是这样做的。谢谢。
cowboybebop 2011年

Answers:


205

参见https://help.github.com/articles/duplicating-a-repository

精简版:

为了精确复制,您需要同时执行裸克隆和镜像推送:

mkdir foo; cd foo 
# move to a scratch dir

git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

cd ..
rm -rf old-repository.git  
# Remove our temporary local repository

注意:上面的代码可以在任何远程git repo上正常工作,说明不是特定于github的

上面创建了一个新的仓库的远程副本。然后将其克隆到您的工作计算机上。


2
如果旧存储库和新存储库具有相同的名称(而不是相同的git URL),将会发生什么。就像我刚刚克隆Jeremy.git到另一个一样Jeremy.git
gran_profaci 2014年

这不会是完全重复的内容。问题将不会转移。
Slam

这会保留历史吗?
托马斯

@Thomas我只是这样做,是的,它在副本中保留了我的所有历史记录。请注意,在您推送并cd到新的仓库后,那里仍然没有任何东西,因为您已推送到遥控器,因此您需要进行拉动
PfunnyGuy

7
为了使此答案适用于GitHub,必须首先在GitHub上创建新存储库。
亚历克斯·霍尔科姆

22

您也可以使用git-copy

与宝石一起安装

gem install git-copy

然后

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git

1
首先如何安装gem?这似乎是最轻松的解决方案。已投票!
saran3h '18

它通常是Ruby安装的一部分。在Ubuntu上做sudo apt install ruby
伤害

9

如果要复制到GitHub,则可以使用GitHub Importer来完成。原始存储库甚至可以来自其他版本控制系统。


4
这非常有效,甚至可以保留历史记录-应该得到更高的评价
John D

1
我同意。这种方法更加直观,可以完全在Github GUI中完成,并且不涉及任何令人困惑的命令行废话。步骤:1)在GUI中创建新的存储库,但不要单击标有“使用自述文件初始化此存储库”的复选框,执行此操作后,Github将为您显示一个新页面和一个标有“ ...或从中导入代码的选项”。另一个存储库。” 而已!
Luke F.

5

如果您只想使用现有文件中的全部或大部分文件来创建新存储库(即,作为一种模板),我发现最简单的方法是使用所需名称等创建新的存储库,将其克隆到您的桌面,然后只需在其中添加所需的文件和文件夹。

您没有获得所有的历史记录等信息,但是在这种情况下,您可能不希望如此。


-1

打开终端。

创建存储库的裸克隆。

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push to the new repository.

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git


我尝试了您的方法。而且我收到此错误消息:[远程拒绝] master-> master(拒绝预接收钩子)和其他一些类似的消息。最后一个是:错误:无法推送一些参考。我该如何纠正?
LND
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.