Как мне сделать
git статус
игнорировать различия в конце строки?
Справочная информация:
Я случайно использую Windows и Linux для работы над проектом. Проект находится в Dropbox.
Я много узнал о том, как заставить git diff игнорировать окончания строк. Поскольку я использую meld, git diff открывает meld для каждого файла. И meld говорит "идентичный файл".
Итак, как мне этого избежать. Git должен открывать meld только для измененных файлов. И git status не должен сообщать о файлах как об измененных, если отличается только окончание файла.
РЕДАКТИРОВАТЬ: Причина:
Это произошло из-за этой настройки в Windows
core.autocrlf правда
Итак, я проверил рабочую копию в Linux и установил core.autocrlf false в Windows.
Было бы неплохо узнать, как заставить git status игнорировать разные новые строки.
core.autocrlf
была основной причиной в Windows, но также и лекарством в Linux. Проблема в том, чтоautocrlf
она глобальна в Windows, и в репо нет этой настройки.git/config
. Запустив локальный компьютер,git config core.autocrlf true
я избавился от ложных изменений в моей рабочей копии NTFS, клонированной в Windows, но доступной в Linux. (теперь есть только ложные изменения с символическими ссылками - символические ссылки NTFS РАБОТАЮТ на креплениях fuseblk, но Git считает их модифицированными ...)Ответы:
Попробуйте установить значение core.autocrlf следующим образом:
источник
core.autocrlf true
это рабочий параметр CygWin.core.safecrlf false
это рабочая настройка в git bash или mingwВместо этого используйте .gitattributes со следующей настройкой:
.gitattributes будут находиться в том же каталоге, что и ваш глобальный .gitconfig. Если .gitattributes не существует, добавьте его в этот каталог. После добавления / изменения .gitattributes вам нужно будет выполнить полный сброс репозитория, чтобы успешно применить изменения к существующим файлам.
источник
git status
. Фактически это меняет способ регистрации файлов в репозитории. ref: git-scm.com/docs/gitattributes#_code_text_codeЭтот ответ кажется актуальным, поскольку OP ссылается на необходимость решения для нескольких ОС. В этой статье справки Github подробно описаны доступные подходы к обработке окончаний строк в разных ОС. Существуют глобальные подходы и подходы для отдельных репо к управлению окончаниями строк между операционными системами.
Глобальный подход
Настройте обработку окончаний строк Git в Linux или OS X:
Настройте обработку окончаний строк Git в Windows:
Подход на основе репо:
В корне репозитория создайте
.gitattributes
файл и определите параметры окончания строки для файлов проекта, по одной строке за раз в следующем формате:path_regex line-ending-settings
гдеline-ending-settings
одно из следующих значений:Это
text
значение можно настроить дополнительно, чтобы указать Git, как обрабатывать окончания строк для совпадающих файлов:text
- Изменяет окончание строки на окончание строки ОС.text eol=crlf
- Преобразует окончания строк вCRLF
при оформлении заказа.text eol=lf
- Преобразует окончания строк вLF
при оформлении заказа.text=auto
- Разумное значение по умолчанию, оставляющее обработку строки на усмотрение Git.Вот содержимое образца файла .gitattributes:
Подробнее о том, как обновить репо после изменения настроек окончания строк, можно здесь . Tldr:
В некоторых случаях это все, что нужно сделать. Другим может потребоваться выполнить следующие дополнительные шаги:
источник
Проблема, связанная с командами git в операционной системе Windows:
предупреждение: LF будет заменен на CRLF в ...
У файла будут исходные окончания строки в вашем рабочем каталоге.
Разрешение :
Никаких предупреждающих сообщений не появляется.
источник
Я создал скрипт, чтобы игнорировать различия в окончании строк:
Он отобразит файлы, которые не добавлены в список фиксации и были изменены (после игнорирования различий в окончании строк). Вы можете добавить аргумент «добавить», чтобы добавить эти файлы в коммит.
Исходный код: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Обновления :
источник
git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'
; на это: my @mods =git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-
;Я использую и windows, и linux, но решение
core.autocrlf true
мне не помогло. У меня даже ничего не изменилось послеgit checkout <filename>
.Поэтому я использую обходной путь для замены
git status
-gitstatus.sh
Я просто сравниваю
md5sum
файл и его собрат в репозитории.Пример вывода:
источник