我目前正在将存储库从 bitbucket 迁移到 github,并遇到了两种执行此操作的方法:
- 克隆现有并推送到镜像:
git clone --mirror {url}
git push --mirror {url}
- 只需更改本地存储库的来源:
git remote set-url origin {url}
这两种方法有什么区别,应该首选哪一种?
最佳答案
这些并不是做同一件事的不同方法,它们是同一过程的不同步骤。
首先要考虑更简单的问题,git remote set-url origin {url}
只是告诉存储库的特定本地副本,当您说“origin”时,您指的是什么远程存储库。它不会在任何地方复制任何数据,它只是配置将来的命令,例如 git fetch origin 、 git push origin 或 git pull origin 将会执行的命令做。
要实际迁移存储库,您需要复制一些实际数据,这意味着运行 git Push
的某些变体。您只需为 origin
配置新的 URL,然后为 git push origin master
即可;但现在您的新存储库只能从 master
访问历史记录;它不会包含任何未 merge 的分支或任何标签。因此,您可以添加 --mirror
选项,这基本上意味着“推送您所知道的所有内容”(也意味着“覆盖远程端不同意的任何内容”,但如果远端为空)。
最后一个难题是,普通的本地副本有自己的一组分支,通常只是您使用过的分支;这不会包括原始远程存储库上的所有分支,并且很可能包括您从未推送或已经删除的内容。因此,您希望从与远程存储库完全匹配的副本开始,为此,您可以使用 --mirror
选项来 git clone
。
因此,实际过程实际上涉及您给出的所有三个命令:
# Create a temporary clone for the migration
git clone --mirror {old-url} temp-clone
cd temp-clone
git push --mirror {new-url}
# This is no longer needed
cd ..
rm -rf temp-clone
# Now point your normal working copy at the new remote repo
cd working-copy
git remote set-url origin {new-url}
git fetch origin
关于git - git push --mirror 和 git set-url 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62772435/