如何复制一个git仓库?(不使用fork)

157

我有两个代码库,需要将其中一个完整地复制到另一个空的代码库中,而后者与第一个代码库的访问级别不同。副本和源代码库不应该保持链接。

我对git不太熟悉,如果有人可以帮我解决这个问题,那就太好了。


6
我不确定,但我猜你可以克隆它,然后使用“git config remote.origin.url git://new.url/proj.git”的命令将remote.origin设置为你的新repo。 - Rufinus
是的,我刚刚发布的链接可以做到那样的事情。 - nbz
@rudinus 我已经这样做了。谢谢。 - cowboybebop
13个回答

267

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

简短版:

为了创建一个完全相同的副本,您需要执行裸克隆(bare-clone)和镜像推送(mirror-push)两个步骤:

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仓库,不仅限于github

上述步骤创建了一个新的远程仓库副本。然后将其克隆到您的工作机器上。


2
如果旧的和新的存储库具有相同的名称(而不是相同的git URL),会发生什么。就像我刚刚将Jeremy.git克隆到另一个Jeremy.git中一样。 - gran_profaci
这不会是一个完全的副本。问题将不会被转移。 - Slam
这是否保留了历史记录? - Thomas
@Thomas 我刚刚做了这个,是的,它保留了我所有的历史记录。请注意,在你推送并进入新的仓库后,那里仍然没有任何东西,因为你已经推送到远程,所以你需要进行一次拉取。 - PfunnyGuy
18
要在GitHub上使用这个答案,首先必须在GitHub上创建新存储库。 - Alex Holcombe
显示剩余3条评论

27

你也可以使用git-copy

注意:你需要先安装Ruby。运行ruby -v来检查是否已经安装了Ruby。如果没有:

Linux:运行sudo apt install ruby,Windows:使用RubyInstaller,macOS:使用Homebrew

现在安装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
通常是 Ruby 安装的一部分。在 Ubuntu 上执行 sudo apt install ruby - harm
8
“how do you install gem in the first place?” 这个问题使得这不是最无麻烦的解决方案。 - Dev Null

21
如果你要将内容复制到GitHub上,你可以使用GitHub导入工具来为你完成。即使原始仓库来自其他版本控制系统也没有问题。

5
这个功能完美运行,甚至可以保留历史记录 - 应该得到更高的赞同票。 - Coder
1
我同意。这种方法更加直观,可以完全在Github GUI中完成,而且不涉及任何混乱的命令行操作。步骤:1)在GUI中创建新的repo,但不要勾选标记为“使用README初始化此存储库”的复选框。完成后,Github将向您呈现一个新页面和一个标记为“…或从另一个存储库导入代码”的选项。就是这样! - Luke
1
如果您对要复制的存储库只有只读权限,则无法正常工作。 - Joshua Foxworth
做这个工作最简单的方法,太好了!此外,如果有人只有阅读权限(或在GitHub上启用了双因素身份验证),他们需要生成个人访问令牌,然后将其用作密码 (https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)。 - Siddharth Bhansali
无麻烦的方式 - mr.loop

10

更新于2021年11月

现在你可以很容易地从github的另一个版本控制库中复制文件和文件夹。

步骤:

  1. 创建一个新的仓库
  2. 点击底部的导入代码按钮

导入代码

  1. 粘贴您的存储库克隆URL并单击“开始导入”

开始导入

当成功完成导入时,您将收到电子邮件通知。


4
目前最佳的方式。必须得到点赞! - Wanderson Santos
1
尝试导入私有仓库,但它一直要求我的凭据。没有成功。 - Rafs
一样的问题,看起来它不能与私有仓库一起使用。 - shem
2
对于私有仓库,请在提示时使用具有只读访问权限的个人访问令牌来代替密码。文档链接:https://docs.github.com/en/get-started/importing-your-projects-to-github/importing-source-code-to-github/importing-a-repository-with-github-importer - Skeve

8

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

在这种情况下,您不会获得所有历史记录等,但您可能不需要它们。


1
这就是我以前的做法,但我认为一定有更好的方法。但实际上并没有。验证后让人放心。 - Rafs

2

我发现在Github上直接操作会更加容易。在创建一个新的空仓库(子仓库)之后,如果你想让它拥有和父仓库相同的代码, 点击顶部栏的 Code。在底部选择最后一个选项(...或从另一个存储库导入代码)。然后会提示你输入你想要导入代码的仓库的克隆链接。将父仓库的克隆链接粘贴进去并点击导入即可。


1

更简单和适合初学者的选择:如果您想避免使用命令行和终端来复制存储库,这是您需要做的:

  1. 转到显示所有存储库的 Github 页面 (https://github.com/your-account-name?tab=repositories)
  2. 点击“New”按钮,创建一个新的存储库。
  3. 点击“repository template”选项,“No template”按钮。这将为您提供当前配置为模板的存储库列表。
  4. 选择您想要复制的存储库*。
  5. 完成存储库的创建。
  • 如果您想要复制的存储库在第3步的列表中不可用,您需要将其配置为模板:转到“存储库页面”>设置>“template repository”复选框。

1
  • 你需要复制任何需要克隆和操作的存储库链接。(在这里!)

  • 点击Github仪表板右上角的+,从下拉菜单中选择导入存储库(在这里!)

  • 它将重定向到导入页面,在第一个输入框中粘贴repo链接并输入新存储库的名称。然后点击开始。(在这里!)

  • 然后它会再次重定向到另一个页面,将克隆/导入repo到您的repos。它将类似于this.

  • 导入完成后,它会通过邮件通知您,或者您可以单击下面的链接打开新的repo。

  • 您可以继续在repo上工作,并单击键盘上的“.”来激活github开发人员,然后继续编辑它。(在这里!)

希望这回答了你的问题。

d chipmunk


0

我注意到其他答案中有些人使用裸克隆,然后镜像推送到新存储库,但这对我来说不起作用,当我打开新存储库后,文件看起来混乱,不符合我的预期。

以下是一种绝对有效的复制文件的解决方案,尽管它不能保留原始存储库的修订历史。

  1. git clone 存储库到本地计算机。
  2. cd 进入项目目录,然后运行 rm -rf .git 删除所有旧的 git 元数据,包括提交历史记录等。
  3. 通过运行 git init 初始化一个全新的 git 存储库。
  4. 运行 git add . ; git commit -am "Initial commit" - 当然,您可以根据需要命名此提交。
  5. 将其设置为新存储库的源 git remote add origin https://github.com/user/repo-name(将 URL 替换为新存储库的 URL)
  6. 使用 git push origin master 将其推送到新存储库。

完整步骤:

mkdir my-repo
cd my-repo
git clone <repo> .
rm -rf .git
git add . ; git commit -am "Initial commit"
git remote add origin https://github.com/user/repo-name
git push origin master

这样做不会保留历史。 - edemaine

0

使用github GUI的简单方法。 单击选择的存储库,然后在设置中勾选模板存储库。 当您导航回主要存储库时,您可以创建直接副本


目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接