git - git push --mirror 和 git set-url 之间的区别

标签 git

我目前正在将存储库从 bitbucket 迁移到 github,并遇到了两种执行此操作的方法:

  1. 克隆现有并推送到镜像:
  • 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/

    相关文章:

    git - 分支明显不同,但提交历史是相同的

    git - Azure DevOps Git UI 自动化相同的存储库或单独的

    git - 修剪 Git 提交/压缩 Git 历史记录

    git - 将暂存文件与 stash 文件进行比较

    Git:暂存补丁的能力

    bash - 如何让 git show --stat 仅列出更改的文件数、插入和删除?

    android - shell脚本envsetup.sh是如何执行launch的?

    Git merge 驱动程序 - 如何查找 merge 文件的完整路径?

    java - 在 VCS(SVN、Git、...)中存储 .jar 文件的最佳实践

    Git 更改与远程 merge 后丢失的文件(SourceTree,GitHub)