【问题标题】:Git: keep branch names and paths the same during cloning between remotesGit:在远程克隆期间保持分支名称和路径相同
【发布时间】:2022-06-17 22:23:02
【问题描述】:

如何在 GitLab 服务器之间克隆存储库以保持分支名称和路径一致?

我使用以下顺序在 GitLab 服务器之间克隆存储库,中间是本地 git 客户端:

git clone <source URL>
for /F %R in ('git branch -r') do git branch --track %R %R
git fetch --all
git pull --all
git fetch --tags
git remote rm origin
git remote add origin <target URL>
git push --all
git push --tags

但是这个序列改变了分支路径并创建了源服务器上不存在的分支。

说我在源 GitLab 中有一个带有 2 个分支的仓库:

* branch1
  branch2

(这里和下面的星标是默认分支)

当我使用 git clone 将 repo 克隆到本地计算机时,我得到了两个额外的分支,与源服务器上的默认分支相关:

* branch1
  remotes/origin/HEAD -> origin/branch1
  remotes/origin/branch1
  remotes/origin/branch2

git branch --track之后分支数增加到7个:

* branch1
  origin/HEAD
  origin/branch1
  origin/branch2
  remotes/origin/HEAD -> remotes/origin/branch1
  remotes/origin/branch1
  remotes/origin/branch2

此外,新的 HEAD 分支(origin/HEAD)不再与任何 branch1 分支相关。

最后,当我删除旧的原点并添加一个新的时,我得到:

* branch1
  origin/HEAD
  origin/branch1
  origin/branch2

这正是将推送到目标 GitLab 服务器的内容。一个分支有两个重复项('branch1'、'origin/branch1' 和 'origin/HEAD'),另一个更改了它的路径('branch2' -> 'origin/branch2')。

在这里,我可以删除“额外”分支并手动重命名所有分支,然后再将它们推送到目标服务器。但是当一个 repo 中有数百个分支时,这变得很头疼。

虽然我可以编写一个脚本在推送之前从所有这些分支的名称中删除“origin/”,但我感觉就像发明了一辆自行车。有没有更简单的方法可以让目标 GitLab 中的分支名称与源 GitLab 中的分支名称完全相同?

【问题讨论】:

  • Git 在这里并没有真正处理“路径”:分支名称 act like 路径名称(Git 有时将它们存储在文件系统实体中)但它们实际上并不是路径名称。但一般来说,如果您要复制带有 git clone 的存储库 并且 您想要复制 names 数据库以及 commits-and-other-objects 数据库,您想要--mirror。您将从源执行一个镜像克隆,并将一个镜像推送到目标(然后删除中间镜像)。请注意,这不会复制 GitLab 问题、MR 等数据库。
  • 谢谢 torek,当然,我知道这些不是真正的路径,我只是将它们作为更“人性化”的解释。我可能会称它们为命名空间,只是斜线更常与路径相关联。让我试试 --mirror 语法。除了这里的代码库,我什么都不关心。

标签: git git-branch


【解决方案1】:

免责声明:torek 的所有凭据,他们在评论中描述了正确的方法,而不是在答案中。但我知道你们寻求答案的人首先会寻找公认的答案。 ;)

所以,--mirror 参数完成了这项工作,顺序是:

git clone <source URL> --mirror
<here you might want to copy it to some new subfolder>
git remote rm origin
git remote add origin <target URL>
git push origin --mirror

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 2010-09-09
    • 2021-06-26
    • 2013-05-11
    • 2021-08-19
    • 2011-10-23
    • 2023-04-10
    • 2012-05-17
    相关资源
    最近更新 更多