分割线

仓库地址

问题

  • 大概…我们经常会遇到这种问题:

    我这为什么运行不了呢>

    帮帮我装下环境!!!

  • 或者这样:

    嗯?刚刚把什么东西删除了???

    卧槽,这配置没错啊,为啥 xxx?

  • 以及:

    系统崩了,重装个系统吧… --> 重新配置环境 --> RNM退钱!!!

    装完东西后经常忘记装了什么,比如 我的环境清单, 让我回顾装过什么东西简直是不可能 de

分割线

解决方案

  • 以上遇到的问题我们可以借助 名单备份 & 配置备份 解决,因为只要知道软件名字和配置,就可以全部恢复

分割线

实现

这里只是提供一个思路,具体怎么备份还需要根据系统、需求、位置来决定.

  • 仅仅需要一个脚本 我的备份脚本

    @REM 开机后设置备份,使用start是在新的终端同时进行的,call是按顺序依次

    set HOME_PATH=C:\Users\29845
    set BACKUP_DIR=D:\Game\Github\Programming-Configuration

    @REM 备份ssh 目录后都必须加个'\' (比如.ssh有可能是目录,也可能是文件,而.ssh\只可能是目录)
    mkdir %BACKUP_DIR%\backup & cd %BACKUP_DIR%\backup
    xcopy %HOME_PATH%\.ssh\ .ssh\ /e/y/d

    @REM 备份lists
    mkdir %BACKUP_DIR%\lists & cd %BACKUP_DIR%\lists
    call scoop list > scoop-apps.bak
    call scoop bucket list > scoop-buckets.bak
    call yarn global list > yarn-global.bak
    call npm -g list > npm-global.bak

    @REM 备份其他
    mkdir %BACKUP_DIR%\others & cd %BACKUP_DIR%\others
    xcopy C:\Windows\System32\drivers\etc\hosts hosts\ /e/y/d
    xcopy D:\Game\Scoop\persist\maven\conf\settings.xml maven\conf\ /e/y/d
    xcopy D:\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 .\PowerShell\ /e/y/d

    @REM 备份 ~\
    mkdir %BACKUP_DIR%\dotfiles & cd %BACKUP_DIR%\dotfiles
    xcopy %HOME_PATH%\.conda\ .conda\ /e/y/d
    xcopy %HOME_PATH%\.config\ .config\ /e/y/d
    xcopy %HOME_PATH%\pip\ pip\ /e/y/d
    xcopy %HOME_PATH%\.npmrc . /y/d
    xcopy %HOME_PATH%\.yarnrc . /y/d
    xcopy %HOME_PATH%\.condarc . /y/d
    xcopy %HOME_PATH%\.gitconfig . /y/d
  • 下面开始解析.

分割线

解析

  • 1.首先需要指定 HOME_PATH用户配置目录 和 BACKUP_DIR备份到的位置

    set HOME_PATH=C:\Users\29845
    set BACKUP_DIR=D:\Game\Github\Programming-Configuration

  • 2.创建子备份文件夹并进入

    mkdir %BACKUP_DIR%\backup & cd %BACKUP_DIR%\backup

mkdir 有个妙处: 默认情况下不会覆盖已有的文件夹.


  • 3.然后把需要备份的内容 copy 进去

    xcopy %HOME_PATH%\.ssh\ .ssh\ /e/y/d

    详细介绍 xcopy 命令: cmd 复制文件命令 copy 复制目录树命令 xcopy

    注意如果 xcopy 的是文件而不是目录的话,要去掉 /e, 不然会把要 copy 文件的同级目录全都 copy (简单讲就是 bug) ,比如如下:

    xcopy %HOME_PATH%\.npmrc . /y/d

  • 4.至于如何备份装过的软件,之前想通过递归目录名来获取,后来发现完全可以通过 list 来输出到文件

    需要注意当执行 scoop list 时,命令行会进入到 scoop 程序而不会回来 (走错路了)

    需要用 call 来获取外部程序 scoop list 的执行结果

    call scoop list > scoop-apps.bak

分割线

敏感信息

  • 有些敏感信息我们想备份但并不想让 Git 存储,比如.ssh中的秘钥

    这时可以在.gitignore 中添加一个目录,用来备份敏感信息.

分割线

结束