git 和 Gemfile.lock 的问题

Posted

技术标签:

【中文标题】git 和 Gemfile.lock 的问题【英文标题】:Troubles with git and Gemfile.lock 【发布时间】:2015-08-30 07:54:05 【问题描述】:

每当我想执行git pull 或签出新分支时,我的Gemfile.lock 都会遇到以下错误。

error: Your local changes to the following files would be overwritten by merge:
    Gemfile.lock
Please, commit your changes or stash them before you can merge.
Aborting

问题是我不知道如何解决它。

存储文件不起作用 - 本地更改只是出于某种原因保留在那里。 我也尝试过运行git checkout -- Gemfile.lock 来放弃更改,但这也不起作用——本地更改只是保留在那里。 我也尝试过创建一个新分支并将Gemfile.lock 更改提交到该分支...但这也不起作用。变化依然存在!

我需要做什么?我什至只是克隆了一个新的 git 存储库,但很快,这一切又开始发生了。

【问题讨论】:

Pavan:不,存储不起作用。我运行git stash,Gemfile.lock 神奇地停留在那里:/ 在未跟踪文件或修改文件下? Pavan:修改后的文件下。 【参考方案1】:

您无法签出 Gemfile.lock,因为 spring 在后端运行以在开发环境中同步您的代码。如果要结帐,首先要停止 spring 进程。您可以通过两种不同的方式停止弹簧。

    要么在终端中使用命令停止 spring

弹簧停止

    或者通过手动杀死本地运行的spring的进程,就像

    ps -aef | grep spring
    kill -9 pid
    

我觉得两者都不错。选择更适合您的!

【讨论】:

【参考方案2】:

这发生在我身上,接受答案中的git reset --hard HEAD 没有帮助。然而,运行spring stop 就成功了。我怀疑 spring 会在修改文件时重写文件,以确保它与通过 spring 运行的代码同步。

【讨论】:

谢谢您,先生!让我省了很多麻烦! 这对我有用 :),当我们编写 spring stop 和 git checkout Gemfile.lcok 时,它看起来像 spring 问题 这是正确答案:***.com/questions/15745045/… 这样的回答让我非常喜欢这个社区。再次为我节省了大量时间!【参考方案3】:

执行以下操作后,我能够再次拉出并签出分支。

git checkout Gemfile.lock
git reset --hard HEAD

我不确定这个解决方案为什么以及如何工作。欢迎解释。

在我的例子中,git 检测到 Gemfile.lock 被修改的原因是文件底部有BUNDLED WITH 1.10.3。在更新 bundler gem update bundler,重新生成并提交 Gemfile.lock 后,它在 git 中不再显示为已修改。

git 版本 2.2.1,Mac OSX 版本 10.10.4,iTerm2 Build 2.9.20150624-nightly(w/shell 集成)

【讨论】:

以上是关于git 和 Gemfile.lock 的问题的主要内容,如果未能解决你的问题,请参考以下文章

git 和 Gemfile.lock 的问题

我可以在 gemfile 中强制 gem 的依赖项吗?

在 Windows 上安装 json gem 时出错

ruby 在Gemfile.lock中指定git分支

我可以查看我的 gem 版本历史吗?

Bundler 找不到 gem 的兼容版本