У меня сейчас проблема с хранилищем, и хотя мой Git-fu обычно хорош, я не могу решить эту проблему.
Когда я клонирую этот репозиторий, то cd
в репозиторий git status
отображаются несколько файлов, которые были изменены. Примечание: я не открывал хранилище ни в каком редакторе или в любом другом месте.
Я пытался следовать этому руководству: http://help.github.com/dealing-with-lineendings/ , но это не помогло с моей проблемой.
Я пытался git checkout -- .
много раз, но, похоже, ничего не делать.
Я на Mac, и в самом хранилище нет подмодулей.
Файловая система - это файловая система Journaled HFS + на Mac и не учитывает регистр. Файлы состоят из одной строки и около 79 КБ каждый (да, вы правильно поняли), поэтому просмотр git diff
не особенно полезен. Я слышал о том, git config --global core.trustctime false
что может помочь, что я попробую, когда вернусь к компьютеру с репозиторием на нем.
Я изменил детали файловой системы с фактами! И я попробовал git config --global core.trustctime false
хитрость, которая не очень хорошо работала.
* text=auto
? Что это значит удалить из.gitattributes
? Я вижу, что это решает эту проблему для меня, но я не уверен, почему это так, и что он действительно делает, и какие возможные проблемы это может создать?git add
иgit commit
который нормализовал файл и избавился от проблемы.git config --global core.autocrlf input
исправил это для меня. Спасибо.Я понял. Все остальные разработчики работают на Ubuntu (я думаю) и, таким образом, чувствительны к регистру файловых систем. Я, однако, не (как я на Mac). Действительно, у всех файлов были строчные близнецы, когда я их просмотрел
git ls-tree HEAD <path>
.Я заставлю одного из них разобраться.
источник
git ls-tree HEAD <path>
показал только один файл. Однако я смог увидеть дубликаты файлов в пользовательском интерфейсе GitHub.com, а также использовать этот интерфейс для удаления одной версии.решил эту проблему в моем случае
https://git-scm.com/docs/git-config
TL; DR;
core.fileMode
Если false, различия в исполняемых битах между индексом и рабочим деревом игнорируются; полезно на сломанных файловых системах, таких как FAT. Смотрите git-update-index (1).
Значение по умолчанию - true, за исключением того, что git-clone (1) или git-init (1) будут проверять и устанавливать core.fileMode false, если это необходимо, при создании хранилища.
источник
git diff
, я обнаружил, что изменения были только в файловом режиме. git обнаруживает,chmod -R 777 .
что было вызвано, когда я запускал свой проект, и этот конфиг позволял мне игнорировать изменения chmod с помощью git stackoverflow.com/q/1580596/6207775Я предполагаю, что вы используете Windows. Эта страница GitHub, на которую вы ссылались, содержит подробности в обратном направлении. Проблема в том, что окончания строк CR + LF уже зафиксированы в репозитории, а поскольку у core.autocrlf установлено значение true или input , Git хочет преобразовать окончания строк в LF, поэтому
git status
показывает, что каждый файл изменяется.Если это хранилище, к которому вы хотите получить доступ, но не имеете к нему никакого отношения, вы можете запустить следующую команду, чтобы просто скрыть проблему, фактически не решая ее.
Если это хранилище, в которое вы будете активно вовлечены и сможете вносить изменения. Вы можете решить проблему, сделав коммит, который изменяет все окончания строк в репозитории на использование LF вместо CR + LF, а затем предпринимает шаги, чтобы предотвратить его повторение в будущем.
Следующее взято непосредственно из справочной страницы gitattributes и должно быть предварительно сформировано из чистого рабочего каталога.
Если какие-либо файлы, которые не должны быть нормализованы, отображаются в
git status
, удалите их текстовый атрибут перед запускомgit add -u
.И наоборот, для текстовых файлов, которые Git не обнаруживает, можно включить нормализацию вручную.
источник
git diff
показывает для тех файлов, которыеgit status
говорят, что изменены, а также какую файловую систему вы используете?git config core.autocrlf false
было достаточно). Нас обманул тот факт, что клиент работает в Linux (SL / RHEL), но сеанс Linux инициируется через x2go с хоста Windows. Так что это вполне может быть наиболее вероятным решением в однородном контексте Win + Lin.Пожалуйста, выполните следующие команды. Это может решить проблему.
источник
В Visual Studio, если вы используете Git, вы можете автоматически генерировать файлы .gitignore и .gitattributes. Автоматически сгенерированный файл .getattributes имеет следующую строку:
Эта строка находится в верхней части файла. Нам просто нужно было закомментировать строку, добавив # в начало. После этого все заработало как положено.
источник
Проблема также может возникнуть из-за различий в правах доступа к файлам , как в моем случае:
Свежий клонированный репозиторий (Windows, Cygwin):
Голый удаленный репозиторий (Linux):
источник
Я хотел добавить ответ, более направленный на «Почему», это происходит, потому что уже есть хороший ответ о том, как это исправить.
Итак,
.gitattributes
есть* text=auto
настройка, которая вызывает эту проблему.В моем случае файлы в главной ветке GitHub имели
\r\n
окончания. Я набрал настройки в хранилище для регистрации с\n
окончаниями. Я не знаю, что проверяет Git. Предполагается, что в моем Linux-боксе проверяются нативные окончания с окончаниями\n
, но я предполагаю, что файл с\r\n
окончаниями проверен . Git жалуется, потому что он видит извлеченные\r\n
окончания, которые были в репозитории, и предупреждает меня, что он проверит в\n
настройках. Следовательно, файлы «должны быть изменены».Это мое понимание на данный момент.
источник
Та же проблема для меня. Я мог видеть несколько изображений с одним и тем же именем, например «textField.png» и «textfield.png» в удаленном репозитории Git, но не в моем локальном репозитории. Я мог видеть только «textField.png», который не был использован в коде проекта.
Оказывается, большинство моих коллег используют Ubuntu с помощью ext4. файловой системой а я на Mac с APFS.
Благодаря Сэму Эллиотту ответу , решение было довольно простым. Сначала я попросил коллегу в Ubuntu удалить избыточные версии файлов с заглавными буквами, затем зафиксировать и нажать на удаленный.
Затем я запустил следующее:
Наконец, мы решили, что каждый разработчик должен изменить свою конфигурацию Git, чтобы это никогда не повторилось:
или
источник
upvoted
@ KDS игрового ответа !=
), потому что она окажетсяignorecase = =
в файле конфигурации.У меня такая же проблема. Также с Mac. Глядя на репозиторий на машине с Linux, я заметил, что у меня есть два файла:
geoip.dat и GeoIP.dat
Я удалил устаревший на Linux-машине и снова клонировал репозиторий на Mac. Я не смог вытащить, зафиксировать, спрятать или вытащить из своей копии хранилища, когда были дубликаты.
источник
У меня тоже была такая же проблема. В моем случае я клонировал репозиторий, и некоторые файлы сразу исчезли.
Это было вызвано тем, что путь к файлу и имя файла были слишком длинными для Windows. Чтобы решить эту проблему, клонируйте репозиторий как можно ближе к корню жесткого диска, чтобы уменьшить длину пути к файлу. Например, клонировать его
C:\A\GitRepo
вместоC:\Users Documents\yyy\Desktop\GitRepo
.источник
Отредактируйте файл с именем
.git/config
:Или:
содержание
Изменить
filemode=true
наfilemode = false
.источник
git config core.Filemode false
Для новых версий macOS это может быть вызвано функцией безопасности ОС.
В репозитории, над которым я работал, был бинарный файл с типом файла * .app.
Это были только некоторые сериализованные данные, но macOS рассматривает все файлы * .app как приложение, и поскольку этот файл не был загружен пользователем, система сочла его небезопасным и добавила
com.apple.quarantine
атрибут файла, который гарантирует, что файл не может быть выполнен.Но установка этого атрибута в файле также изменяла файл, и поэтому он отображался в наборе изменений Git без какого-либо способа его возврата.
Вы можете проверить, если у вас есть та же проблема, запустив
$ xattr file.app
.Решение довольно простое, если вам не нужно работать с файлом. Просто добавь
*.app binary
в свой.gitattributes
.источник
Я скопировал свой локальный репозиторий в другую папку, и появилась куча измененных файлов. Мой обходной путь: я спрятал измененные файлы и удалил тайник . Хранилище стало чистым.
источник
Я обнаружил, что Git рассматривает мои файлы (в нашем случае .psd) как текст. Установка в двоичный тип в .gitattributes решила это.
источник
Я пытался сделать интерактивный ребаз, но он утверждал, что были некоторые измененные файлы, поэтому он не позволил мне сделать это прямо сейчас. Я перепробовал все, чтобы вернуться в чистый репозиторий, но ничего не получалось. Ни один из других ответов не помог. Но это, наконец, сработало ...
Boom! Чистый репозиторий. Задача решена. Тогда мне просто нужно было отбросить последний коммит, когда я сделал мой,
rebase -i
и, наконец, все снова было чисто. Bizarre!источник
На случай, если это поможет кому-то еще, для этой проблемы может быть другая причина: разные версии Git. Я использовал установленную по умолчанию версию Git на коробке с Ubuntu 18.04 (Bionic Beaver), и все работало нормально, но при попытке клонировать репозиторий с помощью Git в Ubuntu 16.04 некоторые файлы показывались как измененные.
Ни один из других ответов здесь не устранил мою проблему, но обновление версий Git для соответствия на обеих системах решило проблему.
источник