从 MacBook Pro 2015 迁移到 MacBook Pro 2021 M1 时进行的一系列的折腾 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
beginor
V2EX    MacBook Pro

从 MacBook Pro 2015 迁移到 MacBook Pro 2021 M1 时进行的一系列的折腾

  •  
  •   beginor 2022-03-14 10:35:19 +08:00 3921 次点击
    这是一个创建于 1314 天前的主题,其中的信息可能已经有所发展或是发生改变。

    安装常用软件的 Arm 版本

    虽然借助苹果的 Rosetta 转译程序, 可以直接运行原来的 x64应用, 但是效率不高, 因此安装对应的 Arm 版本的软件才是最佳的选择。

    从 AppStore 上下载的应用, 基本上已经都是通用 (Universal) 应用了, 只需要在新电脑上重新下载即可。 而不是在 AppStore 上下载的软件, 则只能自己去官方网站上寻找对应的 Arm 版本。

    Rosetta 在最近几年内还是需要的, 毕竟有很多旧的软件还不支持 Arm 。

    迁移微信的聊天记录

    这个软件令人比较头疼, 但是又不得不安装, 而且没有官方的迁移方法, 只能手工按照下面的方法迁移:

    1. 在新电脑上用 AppStore 安装微信, 打开登录一次;
    2. 将旧电脑上的目录 ~/Library/Containers/WeChat 直接用 AirDrop 发送到新电脑;
    3. 在新电脑上将接收到的目录覆盖相同位置的目录, 应该也是 ~/Library/Containers/WeChat

    也可以用同样的办法迁移 QQ 的聊天文件, 或者说从 AppStore 下载的软件都可以用这种方法进行迁移,当然这个没有试过, 仅仅测试了微信和 QQ 。

    迁移项目文件

    项目中有很多临时文件, 特别是 node_modules 目录, 占用大量的空间, 不仅复制过去非常的耗时, 而且就算复制过去了也不能直接使用, 因此把它们清理掉再迁移。

    批量清理 node_modules 目录

    查找制定目录下全部的 node_modules 目录并打印大小

    在 Linux 和 Mac 上, 输入命令

    find . -name "node_modules" -type d -prune -print | xargs du -chs 

    在 Windows 上,可以这样

    FOR /d /r . %d in (node_modules) DO @IF EXIST "%d" echo %d" 

    将找到的 node_modules 目录删除

    在 Linux 和 Mac 上, 输入命令

    find . -name "node_modules" -type d -prune -print -exec rm -rf '{}' \; 

    在 Windows 上, 可以这样

    FOR /d /r . %d in (node_modules) DO @IF EXIST "%d" rm -rf "%d" 

    如果有 Powershell , 还可以这样

    Get-ChildItem -Path "." -Include "node_modules" -Recurse -Directory | Remove-Item -Recurse -Force 

    可以使用同样的办法来删除编译生成的临时文件,比如 binobjclassdistlogs 等临时目录;

    清理完这些临时目录文件, 项目目录由 30G 缩减为 10G , 然后再用 AirDrop 发送到新电脑即可。

    上面清理目录的命令来自 How to Delete ALL node_modules folders on your machine , 其中 Windows 和 Powershell 版本的没有经过测试。

    全新安装 Homebrew

    这个本来按照官网的命令可以直接安装就可以了, 但是由于目前的网络环境不佳直接导致无法克隆 homebrew/core 下来, 最后找到的办法是将环境变量 HOMEBREW_CORE_GIT_REMOTE 设置为 [email protected]:Homebrew/homebrew-core.git , 即使用 ssh 地址才可以顺利克隆下来。

    安装 Homebrew 的第三方 Cask 时, 也可以指定 git 代码库的地址, 比如:

    brew tap beeftornado/rmtree [email protected]:beeftornado/homebrew-rmtree.git 

    接下来就是继续安装 Homebrew 下的包, 和原来的用法一致。

    Docker

    DockerDesktop for Mac 已经适配 M1 , 不过原来的 x64 镜像(特别是数据库)几乎都不能用, 不过大部分 Linux 镜像都有 Arm 版本, 碰到没有的也可以自己编译一个出来, 使用上影响不大。

    但是编译出来的镜像也是 Arm 架构的, 不能直接部署到 x64 服务器上使用, 虽然可以强制性指定 --platform linux/x64 编译出 x64 版本的镜像, 但是又不能直接测试和使用, 看来还是不能完全脱离 Intel 机器。

    虚拟机

    试过 UTM 、VMWare Fusion 、Parallel Desktop , 只能安装 Arm 版本的系统, 对 Linux 支持的比较好,Windows 的支持其实都一般, 毕竟官方是不支持虚拟 Windows 系统的。

    如果确实想运行一些 Windows 软件的话, 还有一个选择,那就是 Wine 和 CrossOver ,Wine 只能运行 64 位的 Windows 软件, 而 CrossOver 则实现了 Wine32on64 , 可以在运行 32 位的 Windows 软件, 只是版本稍微低一些。

    Wine 和 CrossOver 可以使用第三方的 Homebrew 公示 Gcenx/homebrew-wine 来安装,也可以在 releases 页面直接下载, 如果想尝试最新的 wine-devel 以及 wine-staging , 则可以在 Gcenx/macOS_Wine_builds 下载。

    最新的 wine-devel 内置 VKD3D (用 VulkanAPI 实现 Windows 的 DirectX) 对 Windows 游戏支持的比较好, 可以抽时间试一下前段时间白嫖的古墓丽影四部曲。

    USB 扩展

    虽然有 HDMI 接口, 可以直接连接 HDMI 接口显示器、投影仪、电视机之类的, 但是如果需要连接 USB 键鼠 (虽然是键线分离的,但一般不能通过 USB Type-C 直接连接) 和 U 盘之类的话,OTG 线或扩展坞还是需要一个的。

    不想买扩展坞的话,也许买一个带全功能 USB Type-C 的显示器是更好的选择, 比如 Dell 的 U2421E 。

    原文地址 https://beginor.github.io/2022/03/14/move-to-macbook-pro-m1-max.html , 欢迎交流。

    12 条回复    2022-07-26 22:52:56 +08:00
    Leonard
        1
    Leonard  
       2022-03-14 10:38:19 +08:00
    我换到 M1 都是软件重新安装,只转移资料文件。
    mrgeneral
        2
    mrgeneral  
       2022-03-14 10:41:35 +08:00
    周末也刚好有一台电脑进行迁移 Intel 到 ARM 的,只用了 2 小时,大部分内容放在 iCloud 同步,只用把一些本地配置文件迁移过去就完事了,顺便把 ZSH 、VIM 这些也迁移到了 iCloud ,后续只用做一个软连接就妥了。

    代码啥的都在仓库,把目录下的 git remote url 遍历出来,在新电脑重新拉代码更快。

    最后看了下时间主要耗费在下载软件上了。
    beginor
        3
    beginor  
    OP
       2022-03-14 10:51:03 +08:00
    @mrgeneral AirDrop 点对点直联比 Git 克隆快多了, 一次可以发送多个目录, 历史记录什么也都在。
    sherwin008
        4
    sherwin008  
       2022-03-14 11:06:10 +08:00
    微信聊天记录那里,迁移过去点开聊天窗口查看记录,能显示吗?我用同样的方法迁移过去,发现读取不出来之前的聊天记录
    puduhe1
        5
    puduhe1  
       2022-03-14 11:33:41 +08:00
    时间机器不行吗?
    beginor
        6
    beginor  
    OP
       2022-03-14 12:27:26 +08:00
    @sherwin008 我的可以,记录都在
    beginor
        7
    beginor  
    OP
       2022-03-14 12:28:51 +08:00
    @Leonard 是的,确实是这样
    beginor
        8
    beginor  
    OP
       2022-03-14 12:30:11 +08:00
    @puduhe1 时光机只会 Ctrl+C/V , 不会帮你下载 arm 版本的软件。
    Senorsen
        9
    Senorsen  
       2022-03-14 12:48:01 +08:00
    macOS 迁移助理先通过无线方式迁移一下,然后部分不是 Universal 的 App ,以及 Homebrew 之类的重装一下不就好了嘛。

    微信本身也是 Universal 的,迁移助理迁过来后就能直接用了呀。
    lgdty3vv
        10
    lgdty3vv  
       2022-03-14 21:23:39 +08:00
    brew + ohmyzsh 重新安装后,输入 brew li + tab 补全不了 brew list 命令
    haogefeifei
        11
    haogefeifei  
       2022-03-16 15:57:14 +08:00
    9 楼说的对,我就是用迁移助理迁移的,然后慢慢替换常用软件的 arm 版本。你这复杂的折腾完全没有必要。
    DD0a48YwCzYUCQ8y
        12
    DD0a48YwCzYUCQ8y  
       2022-07-26 22:52:56 +08:00
    @lgdty3vv 官方文档有 https://docs.brew.sh/Shell-Completion
    To make Homebrew’s completions available in zsh, you must insert the Homebrew-managed zsh/site-functions path into your FPATH before initialising zsh’s completion facility. Add the following to your ~/.zshrc:

    if type brew &>/dev/null
    then
    FPATH="$(brew --prefix)/share/zsh/site-functions:${FPATH}"

    autoload -Uz compinit
    compinit
    fi
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2871 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 135ms UTC 03:26 PVG 11:26 LAX 20:26 JFK 23:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86