创建 GitHub 仓库的“副本”

5
我看到了类似的问题解答,但我不确定是否熟悉Git和Github的术语,以知道它们是否适用于我的问题。我需要做的是克隆一个现有的Github远程存储库(一个私有存储库,在另一个人的用户名下,我有贡献者访问权限),并在我的账户下创建一个新的私有远程存储库。现有存储库的用户将对存储库进行重大更改、删除和重新推送,在此之前,他们希望我克隆并创建一个副本,以便我们可以从我的用户下继续工作。如果可能的话,我想保留存储库的提交历史记录。
我已经在本地克隆了,但似乎无法弄清如何将其推送到不是原始用户的新远程服务器上。
3个回答

3
使用GitHub界面时,最简单的方法是fork一个repo
或者,如GitHub上的复制存储库文章中所建议的,您可以通过以下shell命令实现repo复制:
  1. Create a bare clone of the repository:

    git clone --bare https://github.com/exampleuser/old-repository.git
    
  2. Mirror-push to the new repository:

    cd old-repository.git
    git push --mirror https://github.com/exampleuser/new-repository.git
    
  3. Remove the temporary local repository you created in step 1:

    cd ..
    rm -rf old-repository.git
    

应该使用cd old-repository,而不是cd old-repository.git。你不能cd到一个文件。同样的,对于rm -rf也是如此。 - Oleksandr Novik
1
@OleksandrNovik 文件夹的名称中也可以包含点号,something.git 并不意味着它是一个文件。更进一步说,每个本地 Git 仓库都有一个名为 .git 的文件夹。 - Adrian Bienias

2
您不可以通过在Github上分叉该存储库,然后克隆并在其上工作来实现您正在尝试做的事情吗?
这也保留了两个存储库之间的关系,并允许您在以后的某个日期将它们的更改合并到您的存储库中,或者反过来。

谢谢,它确实是这样工作的,我完全误解了与上游副本的关系。 - user1483934

1
我们需要更多的细节,但是你尝试做的事情很可能是不必要的。
如果目标是这样的话,业主可以通过创建一个分支并使该分支看起来符合他们的要求,可能用它替换主分支。他们可以在不破坏所有现有历史记录的情况下完成这项工作。
或者,您可以 fork 该存储库。但是,请记住,如果他们要完全重写历史记录,那么将很难将您在 fork 上所做的工作集成到原始存储库中。
您还可以通过删除当前远程 git remote rm origin 并创建一个指向在您的帐户下创建的存储库的新远程来推送您克隆的副本。但是,如果原始存储库完全更改,将很难将在您的“副本”上完成的任何工作集成到其中。

我可能误解了——但我认为如果他们删除或无法识别地更改上游,那么我的分支/克隆也会受到影响?听起来这个假设是不正确的。 - user1483934
1
只有在随后从它们中拉取或获取时,它们才会受到影响。 - wadesworld
谢谢,这真的很有帮助,我对Git的工作原理基本上感到困惑。 - user1483934

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