Есть ли способ определить окончания строк в существующем репозитории git?

Есть ли способ определить окончания строк в существующем репозитории git?

Если я клонирую существующий репозиторий, как мне определить, какой core.autocrlf использовал создатель?

Я все еще не уверен, что лучше всего настроить для core.autocrlf, например, в окне Windows (поскольку существует несколько мнений: Распространение конфигурации git с кодом или https://help.github.com/articles/dealing-with-line-endings)

Дополнительный вопрос: Можете ли вы определить в Windows (с помощью стандартных инструментов), имеет ли репо смешанные окончания строк (из-за неправильной настройки core.autocrlf) во всех коммитах?


person U. N. Owen    schedule 06.08.2012    source источник
comment
Ответ на этот первый вопрос можно найти здесь.   -  person Junle Li    schedule 28.04.2016
comment
git-ls-files?   -  person Dmitriy    schedule 25.02.2020


Ответы (4)


Чтобы проверить, какие окончания строк были фактически зафиксированы в репозитории (независимо от вашей настройки core.autocrlf), попробуйте следующее:

git grep -I --files-with-matches --perl-regexp '\r' HEAD

(-I означает, что двоичные файлы не следует просматривать.)

person robinst    schedule 06.08.2012
comment
Мой msysgit не был скомпилирован с USE_LIBPCRE, будет ли это работать тоже git grep -I --files-with-matches --basic-regexp '\r' HEAD (сейчас нет результатов, также с '\ r \ n') - person U. N. Owen; 06.08.2012
comment
Попробуйте это: git grep -I --files-with-matches $'\r' HEAD - person robinst; 06.08.2012
comment
Эта команда возвращает все файлы в HEAD с окончанием * nix или? Будет ли git grep -I --files-with-matches $'\r\n' HEAD доставить окончания строк DOS? - person U. N. Owen; 06.08.2012
comment
Окончания строк Unix - только \n (LF), окончания строк Windows - \r\n (CR LF). Таким образом, приведенное выше должно найти окончания строк Windows. Если не работает, возможно, где-то внутри git grep происходит преобразование. - person robinst; 06.08.2012
comment
есть ли способ проверить удаленный репозиторий на предмет '\ r' и локального репозитория? Я запускаю его локально, но думаю, что он выводит все файлы, потому что у меня core.autocrlf установлено значение true, это моя теория (иначе говоря, преобразование в окончание строки Windows на моем ящике и фиксация unix ... но я думаю, что кто-то другой, возможно, зафиксировал строку Windows концовки на пульт) - person armyofda12mnkeys; 10.07.2021
comment
@ armyofda12mnkeys Команда (с HEAD) специально проверяет файлы в (удаленном) репозитории, а не извлеченные файлы. Для конкретного файла вы также можете запустить это, и вы получите необработанное содержимое (например, для README.md): git cat-file -p HEAD:README.md. Посмотрите на это, например, | less -u, а если есть ^M, это означает, что в файле \r. - person robinst; 12.07.2021

Я бы по-прежнему сохранял этот параметр (core.autocrlf) на false, как я объясняю в "Распространение конфигурации git с указанным вами кодом "и использует eol директива gitattributes для более детального управления.

При этом, чтобы обнаружить смешанные окончания строк:

  • установите core.autocrlf на true
  • git clone ваше репо
  • git diff: если различия видны сразу после вашего клона ... в рабочем дереве только что произошли некоторые автоматические преобразования eol.

Обновление 2016 (4 года спустя): более современный способ обнаружения изменений eol:

 git -c color.diff.whitespace="red reverse" diff -R -- afile
person VonC    schedule 06.08.2012

Лучшая практика окончания строк здесь: https://stackoverflow.com/a/10855862

Чтобы определить окончания строк в существующем репозитории git:

  1. Установите core.autocrlf в false, чтобы не изменять окончания файлов при передаче файлов.
  2. git clone ваше репо напр. в новом каталоге.
  3. Используйте текстовый редактор, который показывает окончания строк, чтобы открыть файлы (например, PHPStorm). Вам следует открыть несколько файлов, так как окончания строк могут отличаться от файла к файлу.

Вы не можете определить, какой core.autocrlf использовал создатель, поскольку это локальная конфигурация, за исключением того, что в репо есть файл .gitattributes.

В Windows, если вы не используете .gitattributes, просто используйте core.autocrlf true, как он установлен по умолчанию.

person Dr. Botwing    schedule 22.12.2016

В Windows просто запустите следующую команду из командной строки:

git config --list

Это перечислит все переменные конфигурации git.

Если вы хотите получить индивидуальные настройки конфигурации (например, для core.autocrlf), выполните следующую команду в командной строке Windows:

git config --get core.autocrlf

Это даст вам значение "true" ИЛИ "false".

ЕСЛИ вы хотите это изменить, отредактируйте C:\ProgramData\Git\config файл и измените значение с false на true

Примечание. Это применимо только для операционных систем Windows.

person Aniket A. Aryamane    schedule 27.05.2019
comment
Это не отвечает на вопрос. Есть ли способ определить окончания строк в существующем репозитории git? - person Jason S; 14.02.2021