Cập nhật bia không thành công: các tệp cây làm việc không được theo dõi sẽ bị ghi đè bằng cách hợp nhất


207

Đang cố cập nhật Homebrew với brew updatetôi đã gặp lỗi sau

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

Tôi đã tìm thấy một bài đăng trên blog của một người gặp vấn đề tương tự sau khi cài đặt Mountain Lion (tôi cũng đã làm trong tuần này). Anh ta giải thích cách anh ta xóa các tệp được đề cập trong thông báo lỗi

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.

Giả sử những hướng dẫn đó là chính xác (mà tôi có thể không nên giả sử), tôi đã cố gắng làm theo các hướng dẫn này và làm

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

Tuy nhiên, nó nói 'tập tin không tồn tại' khi tôi cố gắng rm cocot.rb

Một điều tôi không chắc chắn là đó cd $(brew --prefix)có phải là những từ chính xác tôi gõ hay tôi phải thay thế tiền tố bằng một cái gì đó? cd đã thành công, vì vậy tôi cho rằng nó đúng - nó đã chuyển tôi vào / usr / local, nhưng không có tệp nào để xóa. Nội dung của / usr / local là

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

Ở mức nào, bạn có biết làm thế nào tôi có thể sửa 'bản cập nhật bia'

Cập nhật: Sau khi xóa các tệp theo hướng dẫn của favouretti và thử chown -R <your_username> $(brew --prefix)/.git, tôi gặp lỗi sau khi chạybrew 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


github.com/Homebrew/homebrew-core - kiểm tra README.md chính thức của Homebrew Core. Không cần phải điều chỉnh quyền như một vài câu trả lời cũ hơn được đề xuất. Ngoài ra kiểm tra xem bạn được trỏ đến url nguồn chính thức hiện tại. Thông tin thêm trong câu trả lời này: stackoverflow.com/questions/14113427/ từ
Kay V

Câu trả lời:


279
cd $(brew --prefix)
git reset --hard HEAD
brew update

Có vấn đề tương tự như câu hỏi ban đầu nhưng với các tệp xung đột khác nhau. Chỉ cần đặt lại là đủ để tôi cập nhật và giải quyết vấn đề.
David

17
bạn có thể muốn làm git add .theo sau git stash: P
mkk

Làm việc cho tôi. Gõ theo nghĩa đen này cd $ (brew --prefix)
Saran

13
Nếu, sau khi thay đổi thư mục brew với cd $(brew --prefix)và đặt lại giai đoạn git với git reset --hard HEADthư mục git statuskhông hoạt động sạch của bạn, bạn cũng có thể cần phải dọn sạch trạng thái bằng cách chạy git clean -df.
Strand McCutchen

82
Thay vì git reset --hard HEAD(sẽ không làm việc cho tôi), tôi đã làm git fetch --allgit reset --hard origin/master
Kevin.

360

Bạn cần làm như sau:

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

Và sau đó làm

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

Về cơ bản, để giải thích thêm một chút:

cd $(brew --prefix)

nói cdđể thay đổi thư mục để bất cứ điều gì brew --prefixsẽ xuất ra. Nếu bạn thử thực thi brew --prefixlệnh, bạn sẽ thấy một cái gì đó trong dòng:

brew --prefix
/usr/local

Vì vậy, lệnh sẽ là trong trường hợp này tương đương cd /usr/local. Các brewphiên bản mới hơn có công thức dưới tiền tố cài đặt của nó và Library/Formula/vì vậy đó là nơi bạn cần tìm những tệp đã lỗi thời / đã thay đổi.

Lưu ý rằng nếu bạn tự thay đổi các công thức đó vì một lý do cụ thể (như ghim phiên bản), hành động này sẽ hoàn nguyên chúng trở lại công thức mặc định và có thể tạo ra các hiệu ứng không mong muốn.

@TedPennings lưu ý trong các bình luận rằng điều này có hiệu quả với anh ta, nhưng trình tự của anh ta là:

  1. chown tất cả mọi thứ để my_username:admin, tức làsudo chown -R ted:admin $(brew --prefix)
  2. chạy hai lệnh git ở trên git fetch origingit reset --hard origin/master

1
Khi tôi thực hiện git reset - gốc / chủ, nó dường như chỉ hoạt động một phần. Đây là đầu ra. lỗi: không thể hủy liên kết 'lỗi. gây tử vong: Không thể đặt lại tệp chỉ mục thành sửa đổi 'origin / master'.
BrainLikeADullPpson

3
Nó có nghĩa là quyền của bạn bị sai lầm. Một cách sẽ là chạy sudo git reset --hard, cách khác và cách tốt hơn là sửa quyền và làmchown -R <your_username> $(brew --prefix)/.git
favouretti

Đây là cách các quyền trên tiền tố brew của tôi trông giống như ở đây:drwxrwxr-x 16 root admin 646 Dec 27 20:30 /usr/local/
favourite

19
Giải pháp này đã sửa chữa mọi thứ cho tôi, nhưng tôi phải chọn mọi thứ cho tên người dùng của mình: admin, tức là, sudo chown -R ted:admin $(brew --prefix)sau đó chạy hai lệnh git ở trên git fetch origingit reset --hard origin/master
Ted Pennings

2
@TedPennings: Tuyệt! Tôi sẽ thêm các lệnh của bạn vào câu trả lời như một bước bổ sung có thể.
yêu thích

46

Điều này được gây ra bởi một lỗi cũ trong updatemã đã được sửa từ lâu. Tuy nhiên, bản chất của lỗi yêu cầu bạn thực hiện như sau:

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

Nếu brew doctorvẫn phàn nàn về các sửa đổi không được cam kết, cũng chạy lệnh này:

cd $(brew --repository)    
git clean -fd

3
Giải pháp này hiệu quả với tôi khi câu trả lời được chấp nhận thì không.
JBCP

31
$ cd $(brew --prefix)
$ git clean -fd
$ git reset --hard
$ sudo chown -R `whoami` `brew --prefix`
$ brew update

Lưu ý: bước 2 & 3 làm việc cho tôi vì tôi đã làm bước 5 trước 4 trước khi tôi gặp lỗi. Bản cập nhật brew trước khi thay đổi chủ sở hữu của thư mục gây ra toàn bộ vấn đề.


Điều này làm việc cho tôi. Tôi muốn thêm rằng điều này có thể được gây ra bởi các chương trình khác cài đặt công cụ /usr/localvới các quyền khác. Đối với tôi, đó là MacPGP đã tự cài đặt với quyền root.
Overbryd

1
Điều này đã sửa nó cho tôi sau khi nâng cấp lên Mac OS X 10.11 bị rối với /usr/localquyền của. Cảm ơn!
CletusW

Điều đáng chú ý là bạn có thể không cần thay đổi quyền và di chuyển thư mục theo cách thủ công. Xem stackoverflow.com/a/40599893/5440638 , ví dụ.
Kay V

6

Tôi gặp vấn đề tương tự khi thư viện gói bia của tôi đã được tải xuống dưới dạng người dùng root và sau đó tôi không thể chạy cập nhật bia vì git sẽ phàn nàn về việc không thể hợp nhất tệp.

Giải pháp là làm: -

sudo chown -R <user> /usr/local/Library

5

Đặt lại kho lưu trữ bia là cách hiệu quả nhất nếu bạn không muốn loại bỏ các sửa đổi tiềm năng trên các công thức bạn có thể đã được áp dụng:

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

4

Tôi đã có thể sửa lỗi này trên máy của mình bằng cách thêm quyền ghi nhóm quản trị (và setgid bit) tại các đường dẫn sau:

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

Các s đặt id nhóm thực thi để các quyền ghi không bị mất vào lần tới khi người dùng quản trị viên khác cập nhật hoặc nâng cấp Homebrew.

Câu trả lời này có phần chưa hoàn chỉnh vì khi tôi cố gắng thực hiện brew cleanup --forcecó vấn đề về quyền khi Homebrew cố xóa nội dung trong / usr / local / Cellar /. (Thật không may, tôi không thể điều tra thêm về điều này vào lúc này.)


2
Có một tập lệnh phổ biến được viết để sửa các quyền của Homebrew rõ ràng hoạt động khá tốt. Tôi không cần phải sử dụng nó cho mình; Tôi đã tự mình thực hiện các thay đổi :) Nhưng điều này có thể giúp người khác: gist.github.com/rpavlik/768518
Steve Benner

1

Một lựa chọn khác là chỉ sử dụng git stash.

Lệnh brew update thực hiện a git pull, vì vậy nếu có bất kỳ tệp nào bị thay đổi (hoặc thậm chí thuộc tính tệp, xảy ra với tôi khi tôi thay đổi quyền trong thư mục theo cách đệ quy), bạn phải khắc phục bằng cách nào đó các xung đột. Sử dụng git stashlà một cách; phải thực hiện bất kỳ thay đổi nào và đặt chúng sang một bên để bạn hoàn toàn trở lại phiên bản repo được cập nhật mới nhất. Homebrew 'location' theo mặc định /usr/localvà nó được cài đặt dưới dạng kho git. Bạn có thể tìm một .gitthư mục để xem cho chính mình. Tôi đang viết một kịch bản gỡ cài đặt homebrew để sớm được đăng trên hồ sơ GitHub của tôi với nhiều thông tin hơn.


1
sudo chown -R USER /usr/local/bin

lưu ý - đối với USER sử dụng lệnh who tức là tên người dùng của bạn

sudo brew doctor

hoặc để khái quát hóa: sudo chown -R $USER /usr/local/bintrong đó việc thêm các vị trí $đặt biến env của USER, nơi chứa Tên người dùng hiện tại.
Cometsong

1

Cách tiếp cận này có thể đơn giản hơn một số. Nó bao gồm:

  • sửa lỗi git để bạn có thể ủy quyền quản lý các thay đổi cho nó một lần nữa.
  • không di chuyển thủ công các tập tin hoặc thư mục.
  • không điều chỉnh thủ công các quyền của tập tin hoặc thư mục.

Các bước (có ghi chú cho những người muốn giải thích):

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 

Tổng quan:
Từ những gì tôi có thể nói, nguyên nhân thực sự của vấn đề này là do thay đổi url repo. Bây giờ brewvà đã brew.git. (Url đầy đủ cập nhật: https://github.com/Homebrew/brew )

Lưu ý 1: Lệnh đầu tiên này sẽ đưa bạn từ bất kỳ đâu trong cấu trúc tệp của bạn đến thư mục chính xác. Cấu trúc thư mục đối với tôi khác với những gì người khác trình bày ở trên (Mac OS 10.11.16), nhưng với lệnh này, những khác biệt đó không thành vấn đề.

Lưu ý 2: Lệnh thứ hai này thêm url từ xa chính xác vào bí danh mới; Tôi đã làm như vậy chỉ trong trường hợp phương pháp này không thực hiện được những gì tôi muốn và tôi cần địa chỉ trước đó một lần nữa. Vì điều khiển từ xa mới hoạt động, tôi sẽ mời người khác nhận xét về việc thay đổi url được đặt bí danh theo nguồn gốc. Tôi sẽ vui vẻ cập nhật câu trả lời để phản ánh những gì làm việc cho bạn.

Lưu ý 3: Lệnh này có chính xác kết quả mong muốn: nó báo cáo một số lượng lớn các bản cập nhật, bao gồm cả báo cáo đặc biệt hay về "==> Đã di chuyển HOMEBREW_REPOSITORY tới / usr / local / Homebrew!" (nhấn mạnh của họ).


Điều này hoạt động khi bạn nhận được 504 lỗi khi chạy brew update.
Omnilord

0

Bài đăng này đã giúp tôi sau khi cập nhật lên El Capitan. Trong trường hợp của tôi, chownkhông hoạt động ("zsh: lệnh không tìm thấy: chown"), vì vậy bước 1 đã thêm dòng này vào .zshrc của tôi:

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

Tôi đã thử một số câu trả lời phổ biến hơn ở trên, vì vậy tôi khá chắc chắn rằng nó git statussẽ xuất hiện vào thời điểm tôi dán vào lệnh quan trọng từ bài đăng trên blog:

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


0

Điều này nên làm việc.

1. cd `brew --prefix`
2. git fetch origin
3. git reset --hard origin/master
4. sudo brew update

Fwiw, sudo rất nản lòng khi sử dụng homebrew. Lưu ý các phiếu giảm giá cho các câu trả lời khác cho câu hỏi này, cũng như cảnh báo homebrew cung cấp một cách hữu ích khi bạn nhập lệnh bằng sudo. @ A5308Y cũng cung cấp một liên kết đến Câu hỏi thường gặp về lý do tại sao sudo là xấu; phiên bản mới nhất của Câu hỏi thường gặp đó có tại github.com/Homebrew/brew/blob/master/docs/ mẹo Bạn đã thử làm theo các bước của mình mà không cần sudo chưa?
Kay V
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.