将Git仓库迁移到另一个GitHub用户

31

在谷歌上有很多指向同一方向的答案,但当涉及到版本控制时,我不想尝试任何操作然后弄乱我的代码库。

我在GitHub上建立了一个仓库,并想将其移动到另一个用户那里,以便我可以关闭该仓库。然后他会邀请我加入该仓库,一旦它属于他的账户。我猜这是与客户合作的常见用例 - 项目完成后,将其移交给客户。

现在,假设这是可能的,我该如何更改项目中本地Git设置,以便我现在将它推送到/拉取自新位置?并且,通过移动仓库,我会失去提交历史吗?

5个回答

26

以下任何一种方法都可以:

  • 将repo的所有权转让给另一个用户,然后由他们将您添加为协作者。

  • 如果有人fork了您的repo,然后您删除了原始repo,他们的fork repo仍然存在,除非它是私有存储库。然后他们可以在其fork repo上将您添加为协作者。

  • 另一个用户可以简单地克隆您的repo(提交内容不变),在GitHub上创建一个新的repo,添加新repo的远程信息,然后将您的repo推送到他们的新repo上。(然后,他们可以将您添加为协作者。)


4
想要更正 xero 给出的答案中的一些内容。Github 的文档表明:“删除仓库会删除其所有衍生仓库。请注意,此操作仅会影响私有仓库,而不包括公共仓库。” 因此,如果仓库是私有的,那么上述评论“但是如果有人 fork 了你的 repo 然后你删除了原始版本,那么他们的 fork 仍然存在。” 就是不正确的。 - JazzTpt
1
如果他们删除了所有的分支,那么用户电脑上的文件应该仍然存在,并且具有完整的历史记录,我猜是这样的,对吗?那么就可以创建一个新的存储库。但是为什么要分叉,而不是克隆呢?那样它就不会与父存储库链接了,我理解是这样的。 - Dariux
尝试仅更改远程并推送。在我的新存储库中,并不是所有分支都存在。所以我猜,这些分支就是我已经检出到我的计算机上的分支。所以现在我唯一的想法是从旧存储库中检出所有分支。但这看起来并不是高效的方式。 - Dariux
分叉存储库不会复制问题。 - Friedrich -- Слава Україні

13

回答问题:

  1. 您不会失去任何东西 - 甚至不会丢失提交历史记录。Git 的重点在于它是分散的 - 拥有仓库副本的每个人都拥有所有内容。只需新建一个仓库。

  2. 将 Git 设置更改为推送到新仓库非常容易。您可以使用

    git remote set-url origin git://new.url.here
    

    或者编辑 .git/config 文件。

我建议你:

  1. 转移仓库所有权(或让客户派生它)。
  2. 更改你的git配置以推送到新的仓库。
  3. 完成。

6

为什么不在GitHub上操作呢?只需将所有权转移给新用户,然后进入GitHub的“设置”页面。

转移所有权:将此存储库转移到另一个用户或您拥有管理员权限的组织。


这似乎并不像听起来那么容易——会出现一个带有大量信息的长警告。如果我这样做会怎样呢:另一个用户设置了一个新的仓库,我在本地将仓库地址更改为新的地址,然后推送并删除自己的仓库。这样行得通吗?新仓库的提交历史会丢失吗? - Dennis Hackethal
1
是的,你的方法也可以。你不会失去任何历史记录。 - the.malkolm
1
我们在哪里有接受转移存储库到我们账户的选项? - Anshul Sahni
GitHub文档中@AnshulSahni的内容:“当您将自己拥有的存储库转移到另一个个人帐户时,新所有者将收到确认电子邮件。确认电子邮件包括接受转移的说明。如果新所有者在一天内没有接受转移,邀请将过期。” - P D
我不记得具体情况了,因为这是一个非常旧的评论,但据我所记,我正在从我的一个账户转账到另一个账户,但我没有在接收账户上收到电子邮件。 - Anshul Sahni

2

在PC上,可以直接使用GitHub桌面版而不安装CLI来完成这一操作。

正如@citruspi所述,如果您编辑配置文件,则相当于您手动执行此命令。

git remote set-url origin git://new.url.here

如果您拥有 CLI,则可以为您执行此操作。

https://dev59.com/EmYq5IYBdhLWcg3w30Xc#14132101

或编辑 .git/config 文件。

以下是步骤...

  1. 在 Github 或 Github Desktop 中创建 /newRepo。
  2. 将该 /newRepo 克隆到本地计算机(如果您没有在 Github Desktop 中创建它)。
  3. 将要克隆到本地计算机上的仓库也进行克隆,例如 /wantToCloneRepo。
  4. 删除 /newRepo 中的 .git 文件夹。
  5. 将文件从 /wantToCloneRepo 复制到本地文件夹 /newRepo。
  6. 编辑文件 /newRepo/.git/config,其中“origin”的 URL 现在应该等于 Github 上的新目标。例如... https://github.com/DataAutomation/newRepo.git
  7. 查找使用 fetch origin 的位置,并且它将显示 Push。
  8. 推送并保留提交历史记录,您将获得一个新的仓库,而无需安装 CLI。

0

你不会失去任何东西。这就是git的优点。每个项目的副本都有一个完整的repo副本 - 你有它,github也有它,任何fork它的人也有它。

远程配置只是.git/config文件中的一行:

    url = git@github.com:mattneub/Programming-iOS-Book-Examples.git

你可以删除旧的远程并创建一个新的,但最简单的方法就是手动编辑那一行。

这里没有什么神秘的。.git文件夹和你的代码库直接对你开放。


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