Pembaruan Brew gagal: File pohon yang tidak dilacak akan ditimpa oleh gabungan

207

Mencoba memperbarui Homebrew dengan brew updatesaya mendapat kesalahan berikut

error: The following untracked working tree files would be overwrittenby merge:     
 Library/Formula/argp-standalone.rb
 Library/Formula/cocot.rb 
Please move or remove them before you can merge. 
Aborting 
Updating e088818..5909e2c 
Error: Failed while executing git pull  origin refs/heads/master:refs/remotes/origin/master

Saya menemukan posting blog oleh seseorang yang mengalami masalah serupa setelah menginstal Mountain Lion (yang saya lakukan minggu ini juga). Dia menjelaskan bagaimana dia menghapus file yang dimaksud dalam pesan kesalahan

I removed these files:
$ cd $(brew --prefix)
$ rm cocot.rb
However, removing these files didn't help with the brew update. Instead I had to manually update brew through git:
$ cd $(brew --prefix)
$ git fetch origin
$ git reset --hard origin/master
$ brew update
Already up-to-date.

Dengan asumsi instruksi-instruksi itu benar (yang mungkin tidak seharusnya saya asumsikan), saya mencoba mengikuti instruksi ini dan melakukannya

    $ cd $(brew --prefix)
    $ rm cocot.rb

Namun, katanya 'file tidak ada' ketika saya mencoba rm cocot.rb

Satu hal yang saya tidak yakin adalah cd $(brew --prefix)apakah itu kata-kata persis yang saya ketik atau apakah saya harus mengganti awalan dengan sesuatu? cd berhasil, jadi saya berasumsi itu benar - itu memindahkan saya ke / usr / local, tetapi tidak ada file untuk dihapus. Isi dari / usr / local adalah

Cellar              clamXav             git             mysql               var Library             doc             heroku              mysql-5.5.15-osx10.6-x86_64 README.md           etc             include             rvm bin             foreman             lib             share

Bagaimanapun, apakah Anda tahu bagaimana saya dapat memperbaiki 'pembaruan minuman'

Pembaruan: Setelah menghapus file sesuai dengan instruksi favoretti dan mencoba chown -R <your_username> $(brew --prefix)/.git, saya mendapatkan kesalahan berikut berjalanbrew update

error: The following untracked working tree files would be overwritten by merge:
    Library/Aliases/gperftools
    Library/Aliases/hashdeep
    Library/Aliases/htop
    Library/Aliases/nodejs
    Library/Aliases/ocio
    Library/Aliases/oiio
    Library/Aliases/pgrep
    Library/Aliases/pkill
    Library/Aliases/qt4
    Library/Aliases/twolame
    Library/Aliases/wxwidgets
    Library/Contributions/cmds/brew-aspell-dictionaries
    Library/Contributions/cmds/brew-beer.rb
    Library/Contributions/cmds/brew-dirty.rb
    Library/Contributions/cmds/brew-graph
    Library/Contributions/cmds/brew-grep
    Library/Contributions/cmds/brew-leaves.rb
    Library/Contributions/cmds/brew-linkapps.rb
    Library/Contributions/cmds/brew-ls-taps.rb
    Library/Contributions/cmds/brew-man
    Library/Contributions/cmds/brew-md5-to-sha1
    Library/Contributions/cmds/brew-mirror-check.rb
    Library/Contributions/cmds/brew-pull.rb
    Library/Contributions/cmds/brew-readall.rb
    Library/Contributions/cmds/brew-server
    Library/Contributions/cmds/brew-services.rb
    Library/Contributions/cmds/brew-switch.rb
    Library/Contributions/cmds/brew-test-bot.rb
    Library/Contributions/cmds/brew-tests.rb
    Library/Contributions/cmds/brew-unpack.rb
    Library/Contributions/cmds/brew-which.rb
    Library/Contributions/cmds/git
    Library/Contributions/cmds/svn
    Library/ENV/4.3/apr-1-config
    Library/ENV/4.3/bsdmake
    Library/ENV/4.3/c++
    Library/ENV/4.3/c89
    Library/ENV/4.3/c99
    Library/ENV/4.3/cc
    Library/ENV/4.3/clang
    Library/ENV/4.3/clang++
    Library/ENV/4.3/cpp
    Library/ENV/4.3/g++
    Library/ENV/4.3/gcc
    Library/ENV/4.3/git
    Library/ENV/4.3/i686-apple-darwin11-llvm-g++-4.2
    Library/ENV/4.3/i686-apple-darwin11-llvm-gcc-4.2
    Library/ENV/4.3/ld
    Library/ENV/4.3/llvm-g++
    Library/ENV/4.3/llvm-g++-4.2
    Library/ENV/4.3/llvm-gcc
    Library/ENV/4.3/llvm-gcc-4.2
    Library/ENV/4.3/make
    Library/ENV/4.3/mig
    Library/ENV/4.3/sed
    Library/ENV/4.3/svn
    Library/ENV/4.3/xcrun
    Library/ENV/libsuperenv.rb
    Library/ENV/pkgconfig/leopard/libcrypto.pc
    Library/ENV/pkgconfig/leopard/libcurl.pc
    Library/ENV/pkgconfig/mountain_lion/libcurl.pc
    Library/ENV/pkgconfig/mountain_lion/libexslt.pc
    Library/ENV/pkgconfig/mountain_lion/libxml-2.0.pc
    Library/ENV/pkgconfig/mountain_lion/libxslt.pc
    Library/Formula/abcl.rb
    Library/Formula/abcmidi.rb
    Library/Formula/aiccu.rb
    Library/Formula/akka.rb
    Library/Formula/alac.rb
    Library/Formula/alure.rb
    Library/Formula/appledoc.rb
    Library/Formula/arangodb.rb
    Library/Formula/argp-standalone.rb
    Library/Formula/argtable.rb
    Library/Formula/autopano-sift-c.rb
    Library/Formula/avian.rb
    Library/Formula/avidemux.rb
    Library/Formula/avro-cpp.rb
    Library/Formula/aws-cloudsearch.rb
    Library/Formula/aws-sns-cli.rb
    Library/Formula/backupninja.rb
    Library/Formula/bact.rb
    Library/Formula/bam.rb
    Library/Formula/basex.rb
    Library/Formula/berkeley-db4.rb
    Library/Formula/bind.rb
    Library/Formula/blazeblogger.rb
    Library/Formula/bochs.rb
    Library/Formula/boost149.rb
    Library/Formula/bsdconv.rb
    Library/Formula/bsdmake.rb
    Library/Formula/buildapp.rb
    Library/Formula/bup.rb
    Library/Formula/byacc.rb
    Library/Formula/cadubi.rb
    Library/Formula/camellia.rb
    Library/Formula/casperjs.rb
    Library/Formula/ccextractor.rb
    Library/Formula/cconv.rb
    Library/Formula/cdo.rb
    Library/Formula/cdpr.rb
    Library/Formula/cgvg.rb
    Library/Formula/checkstyle.rb
    Library/Formula/chordii.rb
    Library/Formula/chruby.rb
    Library/Formula/cifer.rb
    Library/Formula/clhep.rb
    Library/Formula/cntlm.rb
    Library/Formula/cocot.rb
    Library/Formula/cogl.rb
    Library/Formula/collada-dom.rb
    Library/Formula/crash.rb
    Library/Formula/crossroads.rb
    Library/Formula/crosstool-ng.rb
    Library/Formula/css-crush.rb
    Library/Formula/csync.rb
    Library/Formula/ctemplate.rb
    Library/Formula/curlftpfs.rb
    Library/Formula/cutter.rb
    Library/Formula/cvsutils.rb
    Library/Formula/darkstat.rb
    Library/Formula/darner.rb
    Library/Formula/dart.rb
    Library/Formula/dasm.rb
    Library/Formula/debianutils.rb
    Library/Formula/dfc.rb
    Library/Formula/dgtal.rb
    Library/Formula/dhcping.rb
    Library/Formula/di.rb
    Library/Formula/dmtx-utils.rb
    Library/Formula/drip.rb
    Library/Formula/dsniff.rb
    Library/Fo
Aborting
Updating e088818..c1fbc29
Error: Failed while executing git pull  origin refs/heads/master:refs/remotes/origin/master
BrainLikeADullPencil
sumber
github.com/Homebrew/homebrew-core - periksa README.md resmi dari Homebrew Core. Seharusnya tidak perlu menyesuaikan izin karena beberapa jawaban yang lebih lama merekomendasikan. Juga periksa apakah Anda diarahkan ke url sumber resmi saat ini. Info lebih lanjut dalam jawaban ini: stackoverflow.com/questions/14113427/…
Kay V

Jawaban:

279
cd $(brew --prefix)
git reset --hard HEAD
brew update
Strand McCutchen
sumber
Punya masalah serupa dengan pertanyaan asli tetapi dengan file yang berbeda bertentangan. Menyetel ulang saja sudah cukup untuk membiarkan saya memperbarui dan menyelesaikan masalah.
David
17
Anda mungkin ingin melakukannya juga git add .diikuti oleh git stash: P
mkk
Bekerja untukku. Ketik CD ini secara literal (brew --prefix)
Saran
13
Jika, setelah berganti ke direktori brew dengan cd $(brew --prefix)dan mengatur ulang tahap git dengan direktori kerja git reset --hard HEADAnda yang git statustidak kembali bersih, Anda mungkin juga perlu membersihkan status dengan menjalankan git clean -df.
Strand McCutchen
82
Alih-alih git reset --hard HEAD(yang tidak akan bekerja untuk saya), saya melakukannya git fetch --alldangit reset --hard origin/master
Kevin.
360

Anda perlu melakukan hal berikut:

cd $(brew --prefix)
rm Library/Formula/argp-standalone.rb
rm Library/Formula/cocot.rb

Dan kemudian lakukan

git fetch origin
git reset --hard origin/master
brew update

Pada dasarnya, untuk menjelaskan lebih banyak:

cd $(brew --prefix)

memberitahu cduntuk mengubah direktori ke apa pun yang brew --prefixakan ditampilkan. Jika Anda mencoba menjalankan brew --prefixperintah, Anda akan melihat sesuatu di baris:

brew --prefix
/usr/local

Jadi perintahnya akan dalam hal ini setara dengan cd /usr/local. brewVersi yang lebih baru memiliki rumus di bawah awalan penginstalannya dan Library/Formula/, jadi di situlah Anda perlu mencari file yang sudah usang / diubah.

Perhatikan, bahwa jika Anda mengubah sendiri formula itu karena alasan tertentu (seperti menyematkan versi), tindakan ini akan mengembalikannya ke default dan dapat menghasilkan efek yang tidak diinginkan.

@TedPennings mencatat dalam komentar bahwa ini bekerja untuknya, tetapi urutannya adalah:

  1. chown segalanya untuk my_username:admin, yaitu,sudo chown -R ted:admin $(brew --prefix)
  2. jalankan dua perintah git di atas, git fetch origindangit reset --hard origin/master
favoretti
sumber
1
ketika saya melakukan reset git --hard asal / master, sepertinya hanya berfungsi sebagian. Ini adalah output. error: tidak dapat membatalkan tautan '.gitignore' (Izin ditolak) yang lama: tidak dapat membuat file CONTRIBUTING.md (Izin ditolak) Memeriksa file: 100% (2493/2493), selesai. fatal: Tidak dapat mengatur ulang file indeks ke revisi 'asal / master'.
BrainLikeADullPencil
3
Itu berarti izin Anda kacau. Salah satu cara adalah dengan menjalankan sudo git reset --hard, yang lain dan cara yang lebih baik adalah dengan memperbaiki izin dan melakukanchown -R <your_username> $(brew --prefix)/.git
favoretti
Ini adalah bagaimana izin pada awalan minuman saya terlihat seperti di sini:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
favoretti
19
Solusi ini memperbaiki beberapa hal untuk saya, tetapi saya harus mengunyah semuanya untuk nama pengguna saya: admin, yaitu, sudo chown -R ted:admin $(brew --prefix)dan kemudian menjalankan dua perintah git di atas, git fetch origindangit reset --hard origin/master
Ted Pennings
2
@TedPennings: Keren! Saya akan menambahkan perintah Anda ke jawabannya sebagai langkah tambahan yang mungkin.
Favoretti
46

Ini disebabkan oleh bug lama dalam updatekode yang sudah lama diperbaiki. Namun, sifat bug mengharuskan Anda melakukan hal berikut:

cd $(brew --repository)
git reset --hard FETCH_HEAD

Jika brew doctormasih mengeluh tentang modifikasi yang tidak dikomit, jalankan juga perintah ini:

cd $(brew --repository)    
git clean -fd
Eric Wu
sumber
3
Solusi ini bekerja untuk saya ketika jawaban yang diterima tidak.
JBCP
31
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

Catatan: langkah 2 & 3 bekerja untuk saya karena saya melakukan langkah 5 sebelum 4 sebelum saya mendapatkan kesalahan. The pembaruan minuman sebelum mengubah pemilik folder menyebabkan seluruh masalah.

Ron D.
sumber
Ini berhasil untuk saya. Saya ingin menambahkan bahwa ini dapat disebabkan oleh program lain yang memasang barang /usr/localdengan izin lainnya. Bagi saya MacPGP-lah yang menginstal sendiri dengan hak akses root.
Overbryd
1
Ini memperbaikinya bagi saya setelah memutakhirkan ke Mac OS X 10.11 kacau dengan /usr/localizin. Terima kasih!
CletusW
Perlu dicatat bahwa Anda mungkin tidak perlu mengubah izin dan memindahkan direktori secara manual. Lihat stackoverflow.com/a/40599893/5440638 , misalnya.
Kay V
6

Saya memiliki masalah serupa di mana pustaka paket pembuatan bir saya diunduh sebagai pengguna root dan kemudian saya tidak dapat menjalankan pembaruan pembuatan karena git akan mengeluh karena tidak dapat menggabungkan file.

Solusi yang harus dilakukan: -

sudo chown -R <user> /usr/local/Library
pemilikan
sumber
5

Menyetel ulang penyimpanan minuman harus menjadi cara yang paling efisien jika Anda tidak keberatan untuk membuang modifikasi potensial pada formula yang mungkin telah Anda terapkan:

$ cd `brew --prefix`
$ git fetch origin
$ git reset --hard origin/master
$ brew cleanup --force
$ brew update
pstaender
sumber
4

Saya dapat memperbaiki ini di komputer saya dengan menambahkan izin admin group write (and setgid bit) di jalur ini:

sudo chmod -R g+ws /usr/local /Library/Caches/Homebrew

S menetapkan id grup pada eksekusi sehingga izin penulisan tidak hilang saat berikutnya pengguna admin yang berbeda memperbarui atau meningkatkan Homebrew.

Jawaban ini agak tidak lengkap karena ketika saya coba lakukan brew cleanup --forceada masalah izin ketika Homebrew mencoba untuk menghapus konten di / usr / local / Cellar /. (Sayangnya saya tidak dapat menyelidiki ini lebih lanjut saat ini.)

Jimmont
sumber
2
Ada skrip populer yang ditulis untuk memperbaiki izin Homebrew yang tampaknya berfungsi cukup baik. Saya tidak perlu menggunakannya sendiri; Saya secara manual melakukan perubahan :) Tetapi ini dapat membantu orang lain: gist.github.com/rpavlik/768518
Steve Benner
1

Pilihan lain adalah hanya menggunakan git stash.

Perintah pembaruan pembuatan melakukan a git pull, jadi jika ada file yang diubah (atau bahkan atribut file, yang terjadi pada saya ketika saya mengubah izin di direktori secara rekursif) Anda harus entah bagaimana memperbaiki konflik. Menggunakan git stashadalah satu cara; dibutuhkan perubahan dan kesampingkan sehingga Anda secara efektif kembali ke versi repo yang terakhir diperbarui. Homebrew 'location' secara default /usr/localdan diinstal sebagai repositori git. Anda dapat mencari .gitfolder untuk melihat sendiri. Saya sedang menulis skrip penghapusan instalasi homebrew untuk segera diposting di profil GitHub saya dengan info lebih lanjut.

Steve Benner
sumber
1
sudo chown -R USER /usr/local/bin

note - untuk perintah USER use who ie nama pengguna Anda

sudo brew doctor
imvp
sumber
atau untuk menggeneralisasi: di sudo chown -R $USER /usr/local/binmana menambahkan posisi $variabel USER env, yang menyimpan nama USER saat ini.
Cometsong
1

Pendekatan ini mungkin lebih sederhana daripada beberapa. Ini melibatkan:

  • memperbaiki masalah git sehingga Anda dapat mendelegasikan pengelolaan perubahan itu lagi.
  • tidak ada perpindahan file atau direktori secara manual.
  • tidak ada penyesuaian manual dari izin file atau direktori.

Langkah-langkah (dengan catatan untuk mereka yang menginginkan penjelasan):

cd $(brew --repository)                              // see Note 1 below
git remote add brew https://github.com/Homebrew/brew // see Note 2 below
git pull brew master                                 // promising fast-forward report!
brew update                                          // see Note 3 below 

Tinjauan Umum:
Dari apa yang dapat saya katakan, penyebab sebenarnya dari masalah ini adalah perubahan pada url repo. Sekarang brewdan dulu brew.git. (Url lengkap terkini: https://github.com/Homebrew/brew )

Catatan 1: Perintah pertama ini membawa Anda dari mana saja dalam struktur file Anda ke direktori yang benar. Struktur direktori berbeda untuk saya daripada yang ditunjukkan orang lain di atas (Mac OS 10.11.16), tetapi dengan perintah ini, perbedaan itu seharusnya tidak menjadi masalah.

Catatan 2: Perintah kedua ini menambahkan url jarak jauh yang benar ke alias baru; Saya melakukannya kalau-kalau pendekatan ini tidak mencapai apa yang saya inginkan dan saya membutuhkan alamat sebelumnya lagi. Karena remote baru berfungsi, saya akan mengundang orang lain untuk mengomentari hanya mengubah url alias oleh asalnya. Saya dengan senang hati akan memperbarui jawaban untuk mencerminkan apa yang berhasil untuk Anda.

Catatan 3: Perintah keempat ini memiliki hasil yang persis diinginkan: ini melaporkan sejumlah besar pembaruan, termasuk laporan yang sangat bagus dari "==> Migrasi HOMEBREW_REPOSITORY ke / usr / local / Homebrew!" (Penekanan mereka).

Kay V
sumber
Ini berfungsi saat Anda mendapatkan 504 kesalahan saat menjalankan brew update.
Omnilord
0

Posting ini membantu saya setelah memperbarui ke El Capitan. Dalam kasus saya, chowntidak berfungsi ("zsh: command not found: chown"), jadi langkah 1 menambahkan baris ini ke .zshrc saya:

export PATH="$PATH:/usr/sbin"

Saya sudah mencoba beberapa jawaban yang lebih populer di atas, jadi saya cukup yakin git statusitu akan muncul pada saat saya menempelkan perintah penting dari posting blog:

sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local

clozach
sumber
0

Ini seharusnya bekerja.

1. cd `brew --prefix`
2. git fetch origin
3. git reset --hard origin/master
4. sudo brew update
Rahul Vivek
sumber
Namun, sudo sangat tidak disarankan saat menggunakan homebrew. Catat down-vote pada jawaban lain untuk pertanyaan ini, serta homebrew peringatan yang sangat membantu ketika Anda memasukkan perintah menggunakan sudo. @ A5308Y juga menyediakan tautan ke FAQ tentang mengapa sudo buruk; versi terbaru dari FAQ itu ada di github.com/Homebrew/brew/blob/master/docs/... Sudahkah Anda mencoba mengikuti langkah-langkah Anda tanpa sudo?
Kay V