我正在写一个Octopress博客,所以我建立了一个单独的gemset并执行了rvm use gemset octopress
。一切都很顺利。然而,我打开了一个新的ZSH选项卡(如果相关的话,我在OS X Mountain Lion上),它又回到了我使用的前一个宝石集。我当时并不知道,所以我运行了bundle install
。我注意到它安装了我已经安装在Octopress宝石集中的所有宝石,所以我弄清楚发生了什么。问题是:有没有一种简单的方法可以撤消这个bundle install
,这样我就不会在其他gemset中拥有所有这些gem,或者我应该逐个gem手动卸载它们(它们相当多)。谢谢
您可以使用rvm:清空宝石集
rvm gemset empty
它将删除所选宝石集中的所有宝石,您也可以使用临时切换到其他宝石集
rvm @the-other-gemset do rvm gemset empty
几天前,我(再次)遇到了同样的问题,并通过编写以下命令解决了它:
$ threshold="20m"; dir="`rvm gemdir`/gems"; find -X "$dir" -type d -maxdepth 1 -mindepth 1 -mtime -"$threshold" | xargs basename | sed -e 's/-(([0-9]{1,}.)*[0-9]{1,})$/ 1/g' -e 's/(.*) (.*)/gem uninstall 1 --version 2 --executables --ignore-dependencies &/g'
它会生成尽可能多的命令行,用于卸载在给定阈值之后添加的每个gem(以上为20分钟)。然后,您只需在命令提示下复制并粘贴这些行。
在执行我的命令之前:
- 确保当前的宝石组是一个混乱的宝石组
- 将
threshold
设置为适合您需要的值
例如,上面的命令可以生成以下行:
gem uninstall elasticsearch --version 1.0.1 --executables --ignore-dependencies &
gem uninstall elasticsearch-api --version 1.0.1 --executables --ignore-dependencies &
gem uninstall elasticsearch-extensions --version 0.0.14 --executables --ignore-dependencies &
gem uninstall elasticsearch-transport --version 1.0.1 --executables --ignore-dependencies &
如果你想了解更多信息,我在这里发布了一篇文章:http://noteslog.com/post/how-to-undo-a-wrong-bundle-install/