Scoop是一个Windows命令行工具的推荐(版本管理部分)
前提- 在中文中的近义词为条件、假设、先决条件。
我推荐这篇文章给以下的人群。
-
- WindowsUpdateが適用されたWindows10で開発をしている
-
- インストール、設定作業を省力化したい
-
- 同じアプリケーションの別バージョンを使い分けたい
- Scoopがインストール済み
如果您还不清楚Scoop是什么工具,或者尚未安装的话,希望您可以阅读《推荐使用Windows命令行工具Scoop(基础篇)》等相关文章。
在Scoop上的版本控制
Scoop在所有应用程序上并不会公开版本控制的Bucket 1,但向Scoop注册了被安全版本控制的应用程序的’versions’ Bucket。其中包括了node.js和python等应用程序。此外,PHP和Java分别有各自的专用Bucket提供。每个Bucket在初始状态下是不可用的,需要通过使用”scoop bucket add Bucket名称”命令将其添加到Scoop中后才能使用。在这里,我想先尝试没有专用Bucket的node.js。
添加’versions’存储桶
通过scoop bucket add versions来使每个应用程序能处理其旧版本。
PS C:\Users\user> scoop bucket add versions
Checking repo... ok
The versions bucket was added successfully.
虽然停止了搜索,但我会尝试搜索node.js。
PS C:\Users\user> scoop search node.js
No matches found. #node.jsでは見つからなかった
PS C:\Users\user> scoop search node
'main' bucket:
eventstore (4.1.2) --> includes 'EventStore.ClusterNode.exe'
node-chakracore (10.13.0)
nodejs-lts (10.15.3)
nodejs (12.2.0)
sliksvn (1.9.7) --> includes 'svn-populate-node-origins-index.exe'
'versions' bucket:
nodejs010 (0.10.48)
nodejs012 (0.12.18)
nodejs10 (10.15.3)
nodejs11 (11.15.0)
nodejs12 (12.2.0)
nodejs4 (4.9.1)
nodejs5 (5.12.0)
nodejs6 (6.17.1)
nodejs7 (7.10.1)
nodejs8 (8.16.0)
nodejs9 (9.11.2)
目前已有多个版本进行了注册,但在主要存储桶中的’nodejs’是最新的默认安装版本。主要存储桶中也可能包含LTS版本。
除了nodejs之外的版本指定实际上被注册为不同的应用程序,并分别安装了各自版本的稳定或最新版本。
在这里,我们将尝试安装最新版本和上一个版本,即versions存储桶中的nodejs11。
一次性安装
PS C:\Users\user> scoop install nodejs nodejs11
Installing 'nodejs' (12.2.0) [64bit]
node-v12.2.0-win-x64.7z (9.5 MB) [============================================================] 100%
Checking hash of node-v12.2.0-win-x64.7z ... ok.
Extracting node-v12.2.0-win-x64.7z ... done.
Linking D:\Applications\Scoop\apps\nodejs\current => D:\Applications\Scoop\apps\nodejs\12.2.0
Persisting bin
Persisting cache
Running post-install script...
'nodejs' (12.2.0) was installed successfully!
Installing 'nodejs11' (11.15.0) [64bit]
node-v11.15.0-win-x64.7z (9.3 MB) [===========================================================] 100%
Checking hash of node-v11.15.0-win-x64.7z ... ok.
Extracting node-v11.15.0-win-x64.7z ... done.
Linking D:\Applications\Scoop\apps\nodejs11\current => D:\Applications\Scoop\apps\nodejs11\11.15.0
Persisting bin
Persisting cache
Running post-install script...
'nodejs11' (11.15.0) was installed successfully!
我在安装时指定了多个应用程序名称(版本),并尝试将它们一起安装。现在我要确认已安装的node.js版本。
PS C:\Users\user> node --version
v11.15.0
由于安装时的指定顺序,目前设置的是后来安装的11版本。
版本切换
我会确认切换方法。
要切换到相同应用的不同版本,请使用scoop reset命令。
您可以使用scoop reset 应用名(=版本名)和应用名(版本)指定要使用的版本进行切换。
PS C:\Users\user> scoop reset nodejs #最新バージョンに切り替え
Resetting nodejs (12.2.0).
Linking D:\Applications\Scoop\apps\nodejs\current => D:\Applications\Scoop\apps\nodejs\12.2.0
Persisting bin
Persisting cache
PS C:\Users\user> node --version #確認
v12.2.0
PS C:\Users\user> scoop reset nodejs11 #古いバージョンにもどして
Resetting nodejs11 (11.15.0).
Linking D:\Applications\Scoop\apps\nodejs11\current => D:\Applications\Scoop\apps\nodejs11\11.15.0
Persisting bin
Persisting cache
PS C:\Users\user> node --version #確認
v11.15.0
只需要进行版本切换的确认,但是这样可以很容易地完成。这与Linux的alternatives命令非常相似。
在具有独立存储区的Java和php中,同样可以切换版本,甚至连各个供应商的JDK都可以切换。
这在开发时跨版本进行操作确认非常有用。
在Scoop应用程序上进行版本升级。
如果想要更新已经安装的应用程序,可以使用 Scoop update 应用程序名称 命令。
Scoop 的更新非常简便和方便,但在使用 Scoop 进行更新时,有一些小技巧要注意。
更新机制
如果手动更新命令行工具,通常会覆盖已安装文件夹中的新文件。原因是位置路径(PATH)和配置保存位置等难以更改的设置需要保留,但是通过这种方法,恢复到之前的版本显然并不容易。
在Scoop的更新中,不是覆盖到同一文件夹,而是将新版本安装到另一个文件夹中,并切换应用程序的路径。这个步骤是与前面提到的重置命令共同完成的。
因此,在Scoop的管理下,旧版本的应用程序仍然存在。(除非在升级中出现了破坏性变化)环境变量和应用程序的路径等设置也没有改变。
通过这种机制,当使用Scoop安装的应用程序出现问题时,可以切换回旧版本。
切换已安装同名应用的版本。
根据帮助文档,scoop reset命令本来是解决应用程序(在先前提到的多个版本之间)的冲突的命令,但实际上也可用于在已安装的同名应用程序的不同版本之间进行切换。如果想切换已安装应用程序的版本,请输入scoop reset 应用程序名称@版本。假设已经安装了2.20.1.windows.1和2.21.0.windows.1这两个版本的Git,现在尝试在这两个版本之间进行切换。
PS C:\Users\user> scoop reset git@2.20.1.windows.1
Resetting git (2.20.1.windows.1).
Linking D:\Applications\Scoop\apps\git\current => D:\Applications\Scoop\apps\git\2.20.1.windows.1
Creating shim for 'git'.
Creating shim for 'gitk'.
Creating shim for 'git-gui'.
Creating shim for 'tig'.
Creating shim for 'git-bash'.
Creating shortcut for Git Bash (git-bash.exe)
PS C:\Users\user> git --version
git version 2.20.1.windows.1
PS C:\Users\user> scoop reset git@2.21.0.windows.1
Resetting git (2.21.0.windows.1).
Linking D:\Applications\Scoop\apps\git\current => D:\Applications\Scoop\apps\git\2.21.0.windows.1
Creating shim for 'git'.
Creating shim for 'gitk'.
Creating shim for 'git-gui'.
Creating shim for 'tig'.
Creating shim for 'git-bash'.
Creating shortcut for Git Bash (git-bash.exe)
PS C:\Users\user> git --version
git version 2.21.0.windows.1
以如下方式,你可以在已安装的同名应用程序之间切换版本。
我认为它可以用作在某一点上确认添加或修改功能的兼容性以及作为回滚选项,以防在更新过程中出现故障。
结合前面介绍的版本管理桶,我们就不必担心Java或node.js的频繁更新和安全补丁了。我认为这是非常令人高兴的事情。
确认已安装的版本
要使用此功能并确认先前安装的版本,可以使用`scoop info`应用程序名称来检查。以下是在之前的 Git 中执行的示例。
PS C:\Users\user> scoop info git
Name: git
Version: 2.21.0.windows.1
Website: https://git-for-windows.github.io/
License: GPL-2.0 (https://spdx.org/licenses/GPL-2.0.html)
Manifest:
D:\Applications\Scoop\buckets\main\bucket\git.json
Installed:
D:\Applications\Scoop\apps\git\2.20.1.windows.1
D:\Applications\Scoop\apps\git\2.21.0.windows.1
Binaries:
cmd\git.exe cmd\gitk.exe cmd\git-gui.exe usr\bin\tig.exe git-bash.exe
Environment:
GIT_INSTALL_ROOT=D:\Applications\Scoop\apps\git\current
Notes
-----
To get Git to recognise OpenSSH, you will need to run
scoop install openssh
\[environment]::setenvironmentvariable('GIT_SSH', (resolve-path (scoop which ssh)), 'USER')
and then restart powershell.
如前所述,已安装的版本将显示在“Instaled:”之后。在切换版本时,请指定末尾的部分。
在使用同名应用程序切换版本时需要注意的事项。
由于安全补丁可能出现回滚的情况,所以如果最新版本没有问题的话,应该使用同名应用的最新版本。此外,还应该搜索versions bucket和main bucket中是否有管理的长期支持版本等维护版本。
删除旧版本 (卸载)
正如前述,Scoop在更新时不会删除旧版本。虽然命令行应用程序通常不会占用太多空间,但也不能无限制地堆积。为了解决这个问题,Scoop还提供了scoop cleanup命令,可以删除旧版本的应用程序(版本名称)。尽管过度堆积不是好事,但保留旧版本也有其优点,所以适当使用是明智的选择。
最终
使用Scoop管理开发环境的工具和应用程序更新是需要时间和精力的,但Scoop能够大大减轻这种负担。特别是对于由Scoop管理的语言运行时,建议积极更新,并随时利用scoop reset。
这是指在按类别注册的Git仓库中的应用程序。↩
即使是完全不同的应用程序,只要指定了多个应用程序,它会按照指定的顺序进行安装。↩
当然,如果应用程序本身有破坏性更改的更新,则需要做出相应的调整,并最好备份设置文件等以确保安全。↩
严格来说,它是通过切换连接到Junction的目标,以访问更改目录的版本。https://github.com/lukesampson/scoop/wiki/The-‘Current’-Version-Alias↩
即使在官方文档中也没有提及,可能不是推荐的使用方法。↩