Cách xóa sạch Homebrew


26

Làm thế nào tôi có thể loại bỏ Homebrew một cách sạch sẽ. Tôi có thể có một cài đặt cũ bị lỗi, và tôi muốn có một khởi đầu mới.


1
Xem thêm superuser.com/questions/203707/ mà có câu trả lời mô tả một cách "bây giờ là kinh điển" để loại bỏ homebrew
rogerdpack 11/03/2016

@rogerdpack Nhận xét có thể bị xóa bất cứ lúc nào, bạn có thể vui lòng gửi câu trả lời mô tả phương pháp mới không?
nohillside

Câu trả lời:


17

Điều này rm -rfsẽ không hỏi bạn có chắc chắn khi bạn xóa hay không, vì vậy hãy chắc chắn rằng cdlệnh này hoạt động để đưa bạn ra khỏi / tmp (việc đưa cd /tmpbạn đến nơi an toàn trong trường hợp bạn sao chép / dán mọi thứ trong một lần để bạn không xóa các tệp từ thư mục hiện tại của bạn)

Hãy thử điều này trong Terminal của bạn:

cd /tmp
cd `brew --prefix`
rm -rf Cellar
brew prune
rm `git ls-files`
rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
rm -rf .git
rm -rf ~/Library/Caches/Homebrew

Thông tin thêm về chủ đề này có thể được tìm thấy trong Câu hỏi thường gặp về Homebrew .


1
Tôi sẽ kiểm tra xem cd `brew --prefix`thư mục mà bạn không có tệp git bình thường được kiểm tra vì thiết lập cũ / trục trặc có thể không thành công và việc xóa git ls-filescó thể xóa một cái gì đó ngoài phần còn lại của bia của bạn.
bmike

Tôi đã đọc tài liệu này, tôi chỉ nghĩ rằng đó có thể là một câu hỏi hữu ích để yêu cầu tham khảo trong tương lai. Mặc dù vậy, tôi có vấn đề với các hướng dẫn, mà tôi đã đăng dưới dạng một câu hỏi riêng biệt: apple.stackexchange.com/questions/82863/ chủ
ipavlic

Lưu ý rằng liên kết đến Câu hỏi thường gặp về Homebrew nên được cập nhật từ github.com/mxcl/homebrew/wiki/FAQ/iêu đến github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/ của (Tôi không thể chỉnh sửa hoặc thêm ý kiến).
đám mây

1
Bây giờ có một kịch bản cho điều đó: github.com/Homebrew/brew/blob/master/docs/FAQ.md
larkey

5

Mặc dù cài đặt của HomeBrew được đặt nổi bật trên trang nhất của nó, nhưng chi tiết thì không. https://brew.sh/ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" Trong một thời gian dài, rất khó để tìm thấy một gỡ cài đặt đáng tin cậy. Bây giờ, một vài lần nhấp chuột trong tài liệu, giờ đây đã có một phương thức chính thức: https://docs.brew.sh/FAQ Để gỡ cài đặt Homebrew, dán lệnh bên dưới vào dấu nhắc thiết bị đầu cuối. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"


3

Đây là một giải pháp tốt hơn để xóa Homebrew: https://gist.github.com/SteveBenner/11254428

#!/usr/bin/env ruby
#
# Locates and removes Homebrew installation
# http://brew.sh/
#
# Author: Stephen Benner
# https://github.com/SteveBenner
#
require 'optparse'
require 'fileutils'
require 'open3'

$stdout.sync = true

# Default options
options = {
  :quiet     => false,
  :verbose   => true,
  :dry_run   => false,
  :force     => false,
  :find_path => false
}

optparser = OptionParser.new do |opts|
  opts.on('-q', '--quiet', 'Quiet mode - suppress output.') do |setting|
    options[:quiet]   = setting
    options[:verbose] = false
  end
  opts.on('-v', '--verbose', 'Verbose mode - print all operations.') { |setting| options[:verbose] = setting }
  opts.on('-d', '--dry', 'Dry run - print results, but perform no actual operations.') do |setting|
    options[:dry_run] = setting
  end
  opts.on('-f', '--force', 'Forces removal of files, bypassing prompt. USE WITH CAUTION.') do |setting|
    options[:force] = setting
  end
  opts.on('-p', '--find-path', 'Output homebrew location if found, then exit.') do |setting|
    options[:find_path] = setting
    options[:quiet]     = true
  end
  opts.on('-h', '--help', '--usage', 'Display usage info and quit.') { puts opts; exit }
end
optparser.parse!
$quiet = options[:quiet] # provides access to option value within methods

# Files installed into the Homebrew repository
BREW_LOCAL_FILES = %w[
  .git
  Cellar
  Library/brew.rb
  Library/Homebrew
  Library/Aliases
  Library/Formula
  Library/Contributions
  Library/LinkedKegs
]
# Files that Homebrew installs into other system locations
BREW_SYSTEM_FILES = %W[
  #{ENV['HOME']}/Library/Caches/Homebrew
  #{ENV['HOME']}/Library/Logs/Homebrew
  /Library/Caches/Homebrew
]
$files = []

# This function runs given command in a sub-shell, expecting the output to be the
# path of a Homebrew installation. If given a block, it passes the shell output to
# the block for processing, using the return value of the block as the new path.
# Known Homebrew files are then scanned for and added to the file list. Then the
# directory is tested for a Homebrew installation, and the git index is added if
# a valid repo is found. The function won't run once a Homebrew installation is
# found, but it will accumulate untracked Homebrew files each invocation.
#
# @param  [String] cmd       a shell command to run
# @param  [String] error_msg message to print if command fails
#
def locate_brew_path(cmd, error_msg = 'check homebrew installation and PATH.')
  return if $brew_location # stop testing if we find a valid Homebrew installation
  puts "Searching for homewbrew installation using '#{cmd}'..." unless $quiet

  # Run given shell command along with any code passed-in via block
  path = `#{cmd}`.chomp
  path = yield(path) if block_given? # pass command output to your own fancy code block

  begin
    Dir.chdir(path) do
      # Search for known Homebrew files and folders, regardless of git presence
      $files += BREW_LOCAL_FILES.select { |file| File.exist? file }.map {|file| File.expand_path file }
      $files += Dir.glob('**/{man,bin}/**/brew*')
      # Test for Homebrew git repository (use popen3 so we can suppress git error output)
      repo_name = Open3.popen3('git remote -v') do |stdin, stdout, stderr|
        stderr.close
        stdout.read
      end
      if repo_name =~ /homebrew.git|Homebrew/
        $brew_location = path
      else
        return
      end
    end
  rescue StandardError # on normal errors, continue program
    return
  end
end

# Attempt to locate homebrew installation using a command and optional code block
# for processing the command results. Locating a valid path halts searching.
locate_brew_path 'brew --prefix'
locate_brew_path('which brew') { |output| File.expand_path('../..', output) }
locate_brew_path 'brew --prefix' do |output|
  output = output.split($/).first
  File.expand_path('../..', output)
end

# Found Homebrew installation
if $brew_location
  puts "Homebrew found at: #{$brew_location}" unless options[:quiet]
  if options[:find_path]
    puts $brew_location
    exit
  end
  # Collect files indexed by git
  begin
    Dir.chdir($brew_location) do
      # Update file list (use popen3 so we can suppress git error output)
      Open3.popen3('git checkout master') { |stdin, stdout, stderr| stderr.close }
      $files += `git ls-files`.split.map {|file| File.expand_path file }
    end
  rescue StandardError => e
    puts e # Report any errors, but continue the script and collect any last files
  end
end

# Collect any files Homebrew may have installed throughout our system
$files += BREW_SYSTEM_FILES.select { |file| File.exist? file }

abort 'Failed to locate any homebrew files!' if $files.empty?

# DESTROY! DESTROY! DESTROY!
unless options[:force]
  print "Delete #{$files.count} files? "
  abort unless gets.rstrip =~ /y|yes/i
end

rm =
  if options[:dry_run]
    lambda { |entry| puts "deleting #{entry}" unless options[:quiet] }
  else
    lambda { |entry| FileUtils.rm_rf(entry, :verbose => options[:verbose]) }
  end

puts 'Deleting files...' unless options[:quiet]
$files.each(&rm)

1
Chào mừng bạn đến hỏi khác nhau! Mặc dù liên kết bạn cung cấp có thể trả lời câu hỏi, tốt hơn là bao gồm câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. Tôi đã chỉnh sửa câu hỏi của bạn để bao gồm những gì tôi tin là giải pháp mà bạn đang đề cập, tuy nhiên nếu không, xin vui lòng trích dẫn phần có liên quan. Ngoài ra, bạn có thể mở rộng lý do tại sao giải pháp của bạn là tốt hơn?
grg

1
Đó là nhiều hơn một vài dòng vì vậy tôi nghĩ bao gồm cả mã sẽ cồng kềnh, nhưng tôi rất vui khi làm như vậy trong tương lai. Nó tốt hơn bởi vì có các tệp và thư mục không bị bắt bởi câu trả lời đã đăng mà tập lệnh của tôi sẽ xóa. Nó cung cấp tiện ích cho người dùng thông qua các tùy chọn CLI, tìm kiếm kỹ hơn các vị trí pha và được mã hóa để giúp dễ dàng sửa đổi trong trường hợp bạn muốn cải thiện tập lệnh.
Steve Benner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.