我已经多次询问过这种情况,通常会有不同的警告。就我而言,我正在使用git将更改从我的本地开发框部署到git服务器,最后通过cron作业将更改提取到Web服务器上。
我的工作流程是:
git pull -Xingore-space-at-eol
理论上这应该有用。但是,git拒绝这样做,似乎随意选择它认为有本地更改的文件。
Updating bb48022..7eff182
error: Your local changes to the following files would be overwritten by merge:
app/models/User.php
Please, commit your changes or stash them before you can merge.
Aborting
在Web服务器上,我执行了一些文件更改 - 我添加了未跟踪的文件,并且我更改了权限。 git配置了filemode = false
,我还使用了git config --global core.autocrlf true
来启用自动CRLF处理。
git diff --ignore-space-at-eol
不会返回任何差异。 git status
显示了大约12个“未提交的更改”,但这些文件并未真正以我能注意到的任何方式进行更改。
我尝试用
隐藏错误的本地更改git stash
git pull
git stash pop
但它在git pull
此时我唯一的工作选项是吹走整个克隆文件夹,每次都进行新的克隆,然后应用权限更改并执行composer install
我必须在这里错过一个基本概念。非常感谢任何帮助!
答案 0 :(得分:1)
找到解决方案。该问题与终端管理有关。一个开发框是Windows,另一个是Linux,git服务器是Linux,Web服务器是Linux。
在Windows框中,我发现git status
和git diff
显示了未提交的相同修改文件。我的.gitattributes文件中包含* text=auto
,这意味着git会尝试自动确定用于所有文本的正确行尾。出于某种原因,我的Windows框有一个不同步的索引。遵循此处的指示 - http://git-scm.com/docs/gitattributes#_end_of_line_conversion - 我执行了以下操作:
$ rm .git/index # Remove the index to force Git to
$ git reset # re-scan the working directory
$ git status # Show files that will be normalized
$ git add -u
$ git add .gitattributes
$ git commit -m "Introduce end-of-line normalization"
我在Web服务器上执行了一个新的克隆并进行了一些测试更改。它似乎现在正常工作。