Работа с символами EOL в Cygwin Git и Git для Windows с доступом к одному и тому же репозиторию

Мой autocrlf равен true. В моем cygwin-shell git status дает мне правильный список всех моих изменений.

В Git Bash git status говорится, что я изменил все файлы в проекте. Я также вижу это в графическом интерфейсе Git и на вкладке «Изменения» в IntelliJ.

Как это возможно, и что более важно, как я могу это исправить?


person Arthur C    schedule 16.10.2014    source источник
comment
Git и Windows — это точно не союз, заключенный на небесах!   -  person marc_s    schedule 16.10.2014
comment
Что печатает git config --get core.autocrlf?   -  person ryenus    schedule 16.10.2014
comment
Вот в чем проблема, попробуйте установить input в Cygwin и посмотрите результат.   -  person ryenus    schedule 16.10.2014
comment
Лучше отказаться от использования autocrlf и вместо этого использовать .gitattributes, см. Работа с окончаниями строк< /а>.   -  person ryenus    schedule 16.10.2014
comment
Зачем смешивать 3 разных инструмента git? Используйте один, и все в порядке.   -  person Sliq    schedule 16.10.2014
comment
Да, Cygwin Git намного лучше, IMO, особенно в последнее время.   -  person ryenus    schedule 16.10.2014


Ответы (1)


Cygwin Git «видит мир» так, как если бы он работал на платформе POSIX благодаря эмуляции, предоставляемой Cygwin. В отличие от этого, Git для Windows — это родная программа для Windows, которая не использует никакой эмуляции и пытается максимально приблизиться к стандартам Windows (хотя и идиотским). Это приводит к тому, что для Cygwin Git LF является стандартным символом EOL, а для Git для Windows собственная последовательность EOL — CRLF. Итак, оба инструмента видят мир по-разному, и это объясняет то, что вы наблюдаете. Пожалуйста, прочитайте эту недавнюю тему для получения дополнительной информации (и особенно это сообщение).

В любом случае, рассмотрите возможность установки core.autocrlf на false в любом случае, чтобы избежать головной боли, связанной с этой "магией". Я использую исключительно GfW и в конце концов переключил этот параметр на false (по умолчанию true) навсегда.

Вы также можете найти очень хорошо прокомментированный файл .gitattributes из проекта Mono для быть интересным для изучения.

person kostix    schedule 16.10.2014
comment
Хорошо спасибо! Несколько вопросов: (1) Итак, вы предлагаете установить для autocrlf значение false? (2) Любая идея, есть ли способ получить GUI-представление git с помощью cygwin? Иногда мне приходится выполнять сложные этапы/коммиты, когда добавление всех измененных файлов невозможно. - person Arthur C; 17.10.2014
comment
@ArthurC, извините за долгую задержку. 1) Да, переключение на false отключит любую магию, связанную с последовательностями EOL, что должно заставить Gits с обеих сторон иметь одну и ту же идею w.r.t. EOL. Затем вы можете принудительно использовать CRLF для определенных (или всех) файлов через .gitattributes. Или, если возможно, убедитесь, что вы используете текстовые редакторы, у которых нет проблем с единственными LF в качестве EOL (Emacs и Vim — два примера). 2) Я верю, что у Cygwin есть сборки Tcl/Tk, и, следовательно, там должны быть доступны инструменты с графическим интерфейсом Git, gitk и git gui. - person kostix; 19.10.2014
comment
@ArthurC, 2), продолжение. Обратите внимание, что вполне возможно выполнить точную подготовку, используя только инструменты командной строки: git add можно использовать для подготовки любого выбранного файла, а git add --patch можно использовать для подготовки выбранных фрагментов изменений, которые будут постановка, если бы вы сделали без украшений git add. Изменения также можно выборочно отменить с помощью git reset --patch и git checkout --patch: первый удаляет изменения из индекса, а второй делает то же самое с рабочим деревом. Не то чтобы я не советовал вам использовать git gui и др., просто показываю, что они не делают ничего особенного, чего не может обычный Git. - person kostix; 19.10.2014
comment
Спасибо kostix, но я выбираю другой путь. Удалил все git на моей машине, установил msysgit и autocrlf=true. Мои проблемы ушли. Графический интерфейс удобен для меня, потому что, если у меня есть 70 файлов, которые я хочу зафиксировать, а 9 нет, выполнение git add вручную действительно неэффективно. - person Arthur C; 25.10.2014