ГИТ отказывается от возврата/удаления файлов


у меня есть проект с определенными файлами js, которые я не могу обновить. Я запускаю OSX локально, а мой удаленный/промежуточный сервер-Linux (CentOS).

сразу после клонирования моего проекта локально, я заметил, что у меня есть все эти файлы со статусом git modified. Я никогда не изменял их, поэтому я пытался discard changes или reset их, но они приходят снова. Изменение, которое находится в модификации, удаляет все строки и добавляет их снова.

Я не уверен, почему это происходит или как это исправить так что мой статус git чист, как и должно быть.

вот несколько строк из статуса git:

#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/el.js
#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/fa.js
#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/gu.js

обновление 1:

теперь мне удалось зафиксировать вышеуказанные файлы, но промежуточный сервер заблокирован, потому что он не будет вытаскивать новые изменения:

error: Your local changes to the following files would be overwritten by merge:
    app/webroot/js/ckeditor/_source/lang/ar.js
    app/webroot/js/ckeditor/_source/lang/bg.js
    app/webroot/js/ckeditor/_source/lang/bn.js
    app/webroot/js/ckeditor/_source/lang/cs.js
    ...
Aborting

Я не могу совершить / нажать, потому что:

Updates were rejected because a pushed branch tip is behind its remote counterpart

пробовал:

git reset --hard

и

git stash
git stash drop

но они не работают, ничего не происходит.

обновление 2:

git diff дает мне:

The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/fa.js.
The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/gu.js.
The file will have its original line endings in your working directory.
...
4 69

4 ответа:

нормализовать окончания строк

изменение, которое находится в модификации, удаляет все строки и добавляет их снова.

это связано с тем, что новые строки изменяются между зафиксированными файлами и файлами на диске.

Github имеет удобная страница подробно описывая, как справиться с такой проблемой, вкратце (для linux/OSX), Шаг первый-изменить конфигурацию git, чтобы она сортировала окончания строк для ты:

git config --global core.autocrlf input

затем зафиксируйте нормализацию окончаний строк:

git rm --cached -r .
# Remove everything from the index.

git reset --hard
# Write both the index and working directory from git's database.

git add .
# Prepare to make a commit by staging all the files that will get normalized.
# This is your chance to inspect which files were never normalized. You should
# get lots of messages like: "warning: CRLF will be replaced by LF in file."

git commit -m "Normalize line endings"
# Commit

и затем, окончания строк должны быть обработаны правильно. Дополнительную информацию см. На странице справки на github или в соответствующем разделе git docs форматирование и пробелы.

разрешение конфликтов linux-машины

промежуточный сервер заблокирован, потому что он не потянет новые правки.

сообщение об ошибке гласит: "Ваши локальные изменения чтобы следующие файлы были перезаписаны слиянием:", это означает, что они содержат локальные изменения, которые должны быть либо зафиксированы, либо отброшены перед продолжением. Предполагая нормальное использование для промежуточного сервера (у него нет никаких преднамеренных изменений), локальные изменения могут быть отброшены. Например, выполните следующие действия:

$ git fetch origin
# Retrieve updates

$ git reset --hard origin/master
# Forcibly change the current branch to match origin/master

это позволит получить историю репозитория, не обновляя рабочую копию, а затем обновить, чтобы точно соответствовать главной ветви в репозитории. Заметить что последняя команда отменит все незафиксированные изменения.

Я всегда упоминал, что ваш core.autocrlf установлено значение false, в "Git: застрял РЕПО с использованием тайника после нормализации crlf?"

git config --global core.autocrlf false

также убедитесь, что у вас нет .gitattributes С eol директивы, которые будут пытаться конвертировать окончания строк.
Основная идея: вы все еще видите это сообщение об ошибке, когда вы убедитесь, что есть нет автоматическое преобразование любых сорт?


но на всякий случай рассмотрите также "git rebase не удается, "ваши локальные изменения в следующих файлах будут перезаписаны слиянием". Никаких локальных изменений?"

Я на mac, и это неясное изменение конфигурации, казалось, исправило все мои беды в отношении нестагированных изменений, когда их не было.

git config --global core.trustctime false

Я только что провел 2 часа (!) по тому же вопросу с .svg-файл (скалярная векторная графика), который продолжал меняться после 'revert' без моего вмешательства.

таким образом, файл отображается как измененный в 'git status'; возврат его удается, но он продолжает меняться, так что 'pull' терпит неудачу снова и снова.... так раздражает!

Не повезло с 'git reset', 'git ignore', 'git untrack' так далее...

наконец, я решил его, удалив файл из моей локальной системы (не 'git delete', просто Shift + Delete) > > сейчас 'pull' запрос проходит, и файл извлекается из удаленного репозитория.

так легко, я мог бы плакать!

эта проблема неоднократно всплывала с репозиторием Roll20 character sheets на машине Ubuntu, и я мог бы решить ее с помощью

#!/bin/sh

# Use in root dir of git repository
# Fixes some newline-related weirdness
git rm --cached -r .
git reset --hard

но, это перестало решать проблему полностью сегодня, и, оглядев переполнение стека, я обнаружил, что виновником является их .gitattributes file:

# Auto detect text files and perform LF normalization
* text=auto

после git pull origin master,git status вернулся:

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   Star Wars Revised RPG/SWRRPG-updated.html

no changes added to commit (use "git add" and/or "git commit -a")

решение было убрать * text=auto линия от .gitattributes:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   .gitattributes

no changes added to commit (use "git add" and/or "git commit -a")

в изменения на .gitattributes можно отбросить, и Git все равно будет удовлетворен.

Edit +1d: повторил .gitattributes "трюк" сегодня, но не git status перед выкидыванием .gitattributes по изменениям. Без видимой для меня причины (возможно, кэширование git status?), a git status потом вернулся снова:

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   Star Wars Revised RPG/SWRRPG-updated.html

no changes added to commit (use "git add" and/or "git commit -a")

сделать это снова, но с git status между ними работал.