合并冲突导致Brew被禁用

时间:2013-06-19 17:15:41

标签: git homebrew git-merge merge-conflict-resolution

简短版本:我认为我的Brew装置造成了很大的混乱,我不知道该怎么做。

长版......

我开始尝试安装ruby:

brew install ruby

看起来很简单。我立即遇到了这个错误:

Error: Cannot write to /usr/local/Cellar

在运行brew医生后,我发现了一长串的错误表格

Warning: /usr/local/<dir> isn't writable.
This can happen if you "sudo make install" software that isn't managed by
by Homebrew. If a brew tries to write a file to this directory, the
install will fail during the link step.

最终我用一个巨大的chmod解决了这个问题,即

sudo chmod -R 777 /usr/local

似乎可以解决问题。

从那里我尝试了一个简单的“brew更新”。这给了我一个新问题:

error: Your local changes to the following files would be overwritten by merge:
<list of about 100 files>
Please, commit your changes or stash them before you can merge.

不确定要做什么,我运行“git commit”并成功提交了我的更改(我不知道它们是什么)。我认为在与brew update合并时,只需覆盖更改就很容易......

......而且绝对不是这样。以下是brew update的一些示例输出:

Auto-merging share/man/man1/brew.1
Auto-merging Library/Homebrew/version.rb
CONFLICT (content): Merge conflict in Library/Homebrew/version.rb
Auto-merging Library/Homebrew/test/testing_env.rb
Auto-merging Library/Homebrew/test/test_versions.rb
CONFLICT (content): Merge conflict in Library/Homebrew/test/test_versions.rb
Auto-merging Library/Homebrew/test/test_requirement.rb
Auto-merging Library/Homebrew/test/test_formula_validation.rb
CONFLICT (modify/delete): Library/Homebrew/test/test_dependency_expansion.rb deleted in HEAD and modified in 9e3aa8925cf4b03a5b1fda13971dde84e1162c41.

现在brew中的所有文件都有“&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD”和“&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; [hashcode]”在他们身上散落着。为了解决这个问题,我运行了一些命令here

git checkout --theirs *
git add .
git merge

我没有太多的git经验,但我现在相当确定这是一个糟糕的主意。 Git确信我没有合并的更改,但所有“&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD”等标签仍在我的代码中。我甚至无法运行“brew doctor”或“brew update”,因为brew的基本代码不可读。

...结论

我觉得最好的想法是卸载并重新安装brew,但我必须重新安装所有的brew安装。因为我不能运行“啤酒清单”,我不知道这些是什么。还有一种方法可以接受所有远程更改吗?我现在能做什么?

1 个答案:

答案 0 :(得分:1)

chmod -R 777对安全性非常不利。这使得它下面的每个文件和目录都可读写并且可执行,这意味着每个人可以用它做他们喜欢的事情。

最多目录中应具有775的权限 - 更好755,文件应为664644,除非它们是/usr/local/bin中存在的可执行文件,在这种情况下,它们应该再次755

递归更改为/usr/local/意味着状态/提交中列出的每个文件都有权限更改,这就是brew抱怨的原因。可能看起来不多,但它意味着世界的git和系统的安全性。

获得此功能的唯一方法是重置/usr/local/下每个文件/目录的权限,然后使用git reset --hard origin/master

完全删除您的提交 brew并不能很好地与其他应用程序很好地结合使用,除非你真的需要,否则我建议不要使用它。