So entfernen Sie Homebrew sauber

Wie kann ich Homebrew sauber entfernen. Ich habe möglicherweise eine fehlerhafte ältere Installation und möchte einen Neuanfang machen.

Siehe auch superuser.com/questions/203707/… mit Antworten, die einen „jetzt kanonischen“ Weg zum Entfernen von Homebrew beschreiben
@rogerdpack Kommentare können jederzeit gelöscht werden, kannst du bitte eine Antwort posten, die die neue Methode beschreibt?

Antworten (3)

Dies rm -rfwird nicht fragen, ob Sie sicher sind, wenn Sie löschen, also stellen Sie sicher, dass der cdBefehl funktioniert, um Sie aus /tmp herauszuholen (das cd /tmpbringt Sie an einen sicheren Ort, falls Sie alles auf einmal kopieren/einfügen, damit Sie keine Dateien löschen aus Ihrem aktuellen Verzeichnis)

Versuchen Sie dies in Ihrem Terminal:

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

Weitere Informationen zu diesem Thema finden Sie in den Homebrew-FAQ .

Ich würde überprüfen, ob das cd `brew --prefix`in einen Ordner geht, in den Sie keine normalen Git-Dateien eingecheckt haben, da ein altes / fehlerhaftes Setup möglicherweise fehlschlägt und das git ls-filesLöschen etwas anderes als die Überreste Ihres Gebräus löschen könnte.
Ich habe die Dokumentation gelesen, ich dachte nur, dass dies eine nützliche Frage für zukünftige Referenzen sein könnte. Ich habe jedoch Probleme mit den Anweisungen, die ich als separate Frage gepostet habe: apple.stackexchange.com/questions/82863/…
Beachten Sie, dass der Link zu den häufig gestellten Fragen zu Homebrew von github.com/mxcl/homebrew/wiki/FAQ/… auf github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/… aktualisiert werden sollte (ich kann nicht Kommentare bearbeiten oder hinzufügen).
Dafür gibt es jetzt ein Skript: github.com/Homebrew/brew/blob/master/docs/FAQ.md

Die Installation von HomeBrew befindet sich zwar prominent auf der Titelseite, Details jedoch nicht. https://brew.sh/ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" Lange Zeit war es sehr schwierig, eine zuverlässige Deinstallation zu finden. Jetzt gibt es mehrere Klicks entfernt in den Dokumenten eine offizielle Methode: https://docs.brew.sh/FAQ Um Homebrew zu deinstallieren, fügen Sie den folgenden Befehl in eine Terminal-Eingabeaufforderung ein. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

Hier ist eine viel bessere Lösung zum Entfernen von 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)
Willkommen bei Ask Different! Während der von Ihnen bereitgestellte Link die Frage möglicherweise beantwortet, ist es besser, die Antwort hier einzufügen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert. Ich habe Ihre Frage so bearbeitet, dass sie meiner Meinung nach die Lösung enthält, auf die Sie sich bezogen haben. Wenn dies jedoch nicht der Fall ist, zitieren Sie bitte den entsprechenden Abschnitt. Könnten Sie auch erläutern, warum Ihre Lösung besser ist?
Es sind mehr als ein paar Zeilen, also dachte ich, das Einfügen des Codes wäre umständlich, aber ich werde dies in Zukunft gerne tun. Es ist besser, weil es Dateien und Verzeichnisse gibt, die nicht von der geposteten Antwort erfasst werden, die mein Skript entfernen wird. Es bietet dem Benutzer über CLI-Optionen einen Nutzen, sucht umfassender nach Brühpositionen und ist so codiert, dass es leicht geändert werden kann, falls Sie das Skript verbessern möchten.