【问题标题】:Git: how to migrate all local repos to another machine?Git:如何将所有本地存储库迁移到另一台机器?
【发布时间】:2022-08-19 08:14:14
【问题描述】:

我在 c:\\code 文件夹 - 16Gb 下的各个子文件夹中有几十个 git repos 的代码文件。

我想将此文件夹迁移到另一台计算机。目前将整个文件夹复制到 USB 驱动器需要超过 1 天的时间,因为它包含大约 650,000 个小文件。

我可以运行一些脚本来清理我的 c:\\code 文件夹中的所有存储库吗?

编辑:所有的回购都有一个遥控器。我不在乎复制所有分支。我只关心保留 repos 的目录结构,即

c:\\code\\github\\NLog
c:\\code\\github\\Swashbuckle.AspNetCore
c:\\code\\myclient\\DevOpsProject1\\solution1
c:\\code\\myclient\\DevOpsProject1\\solution2
c:\\code\\myclient\\DevOpsProject2\\solutionx
etc
  • 我编辑了my answer 来解决您编辑的问题。

标签: git


【解决方案1】:

您可以使用 git bundle 将每个存储库 full history 捆绑到一文件(每个存储库)

您可以将十几个捆绑包压缩成一个巨大的 tar 文件。

结果:只有一(大)要复制和解压缩的文件。

然后,您可以从它们各自的包中克隆回您的存储库(从它们的包文件中克隆它们)。


我不在乎复制所有分支。我只关心保留 repos 的目录结构

另一种方法是在C:\ 下简单地tar cpvf code.tar code。
将巨型tar文件复制到目标机器,tar xpvf code.tar:目录结构将被保留。

有点像in here:

find . -name "*.git" -type d -exec tar -czf {}.tar.z {} \; -exec rm {} \;

(小心-exec rm 部分:先测试一下)。

【讨论】:

  • 感谢您的编辑,这是一个很好的方法。我现在已经启动了tar 命令,看看需要多长时间。我正在考虑另一种方法,使用 find 命令可以找到所有 git 存储库,并将文件夹名称和远程源 url 输出到文本文件。然后在另一台机器上,我会做一些其他的脚本,它将 git 克隆 repo 回到同一个文件夹。我不需要复制所有已编译的代码和 npm 模块等。
  • @MattFrear 好主意。我已经编辑了答案以包含遵循该方法的可能命令。
【解决方案2】:

我最初在寻找什么:

find . -name .git -type d -execdir git clean -dxf \;

这将我在所有存储库中的 16Gb 文件清理到了 800Mb。 然后是@VonC 的answer

tar cpvf code.tar code

然后在目标机器上:

tar xpvf code.tar

每当我在复制的文件夹中使用 git 时,我都会不断收到错误消息:

fatal: detected dubious ownership in repository

因此,要解决这个问题,我必须“取得该文件夹的所有权”。 我在 Windows 上,这意味着代码文件夹的属性 -> 安全 -> 高级 -> 所有者 -> 更改。尽管“本地管理员”拥有该文件夹,并且我是该组的成员,但我必须让自己成为所有者。

另一个障碍是因为我在公司机器上看不到“安全”选项卡。 Here's the fix for that。

【讨论】:

  • 那应该确实有效。赞成。
【解决方案3】:

您仅从远程存储库中克隆持续提交,例如

git clone --depth 1 https://url-of-your-repo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2019-03-16
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多