2015-08-26 4 views
2

Я вижу, что это было задано много раз, обычно с различными оговорками. В моем случае я использую git для развертывания изменений из моего локального блока разработчиков, вплоть до сервера git и, наконец, для переноса изменений на веб-сервер с помощью задания cron.git pull и фиктивные локальные изменения

Мой рабочий заключается в следующем:

  1. Фиксировать изменения в локальной рабочей копии
  2. Нажимные изменения вышестоящего сервера (созданный как голый репозиторий, который я оттолкнула мою локальную к)
  3. 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 

На веб-сервере, я выполнил несколько изменений файлов - я добавил неотслеживаемые файлы, и я изменил разрешения. git настроен на filemode = false, и я также использовал git config --global core.autocrlf true, чтобы включить автоматическую обработку CRLF.

git diff --ignore-space-at-eol не имеет отличий. git status показывает примерно дюжину «Изменений, не поставленных для фиксации», но эти файлы на самом деле не были изменены каким-либо образом, я могу заметить.

Я пытался припрятать ошибочные локальные изменения с

git stash 
git pull 
git stash pop 

Но он не так же на git pull

Мой работает только вариант в этот момент, чтобы сдуть всю клонированный папку и сделать свежего клона каждый раз, с последующим применением изменений разрешений и выполнением composer install

Мне, должно быть, не хватает фундаментальной концепции. Любая помощь очень ценится!

+0

Что значит «они не изменились каким-либо образом, вы можете заметить»? Как * они изменились? Пробелы? Покажите нам свой файл '.gitattributes'? –

ответ

1

Найдено решение. Эта проблема была связана с управлением в конце строки. Один из них - Windows, другой - Linux, git-сервер - Linux, а веб-сервер - 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" 

Я выполнил свежий клон на веб-сервере и сделал несколько изменений теста. Кажется, сейчас он работает правильно.

Смежные вопросы