git замінює LF на CRLF


838

Запуск git на машині Windows XP, використовуючи bash. Я експортував свій проект із SVN, а потім клонував оголене сховище.

Потім я вставив експорт у каталог голих сховищ і зробив:

git add -A

Потім я отримав список повідомлень:

LF буде замінено CRLF

Які наслідки цього перетворення? Це рішення .NET у Visual Studio.


14
@apphacker, оскільки стандартизація закінчень рядків менш дратує, ніж потрібно самостійно їх змінювати, коли відрізняти два файли. (І звичайно, якщо ви не погоджуєтеся, ви можете вимкнути функцію core.autocrlf).
RJFalconer

2
чому б закінчення рядків були різними, якщо не торкнувся весь рядок
Бьорн

3
Я часто торкаюся багатьох рядків, тому що я експериментую з різними ідеями, додаю твердження про сліди, щоб побачити, як вони працюють, і т.д. Поклав їх назад вони так, як я їх знайшов (або так я подумав).
MatrixFrog

5
@MatrixFrog: ваш редактор здається зламаним, не може автоматично визначити закінчення рядків. Що це таке? Я працюю над гібридними проектами, які повинні мати деякі файли LF та деякі інші файли CRLF у тому ж репо. Не проблема жодного сучасного редактора. Здійснення безладу контролю над версіями (або передачі файлів) із закінченнями рядків для вирішення обмежень редактора - це найгірша ідея, що коли-небудь - очевидна з простої довжини пояснень нижче.
MarcH

4
Єдиний сучасний редактор, про який я знаю, що робить не так - це Visual Studio. Visual Studio із задоволенням відкриє файл із закінченнями рядків LF. Якщо потім вставити нові рядки, він буде вставляти CRLF і зберігати змішані закінчення рядків. Microsoft відмовляється виправити це, що є досить великою вадою щодо інакше досить хорошого IDE: - (
Jon Watte

Відповіді:


955

Ці повідомлення через неправильне значення за замовчуванням core.autocrlf у Windows.

Концепція autocrlfполягає в тому, щоб прозоро обробляти конверсії ліній закінчень. І це робить!

Погані новини : значення потрібно налаштувати вручну.
Хороша новина : це потрібно робити лише ОДН раз на встановлення git (можлива також установка проекту).

Як autocrlfпрацює :

core.autocrlf=true:      core.autocrlf=input:     core.autocrlf=false:

        repo                     repo                     repo
      ^      V                 ^      V                 ^      V
     /        \               /        \               /        \
crlf->lf    lf->crlf     crlf->lf       \             /          \      
   /            \           /            \           /            \

Тут crlf= маркер кінця рядка у стилі win, lf= unix-style (та mac osx).

(pre-osx crне впливає на жоден із трьох варіантів, наведених вище)

Коли з’являється це попередження (під Windows)

    - autocrlf= trueякщо ви маєте стиль Unix lfв одному зі своїх файлів (= РІДНО),
    - autocrlf= inputякщо у вас є стиль win crlfв одному з ваших файлів (= майже ВЖЕ),
    - autocrlf= false- НІКОЛИ!

Що означає це попередження

Попередження " LF буде замінено CRLF " говорить, що ви (маючи autocrlf=true ) втратите свій LF у стилі unix після циклу оформлення замовлення (він буде замінений на CRLF у стилі Windows). Git не сподівається на те, що ви використовуєте LF у стилі unix під вікнами.

Попередження " CRLF буде замінено LF " говорить про те, що ви (маючи autocrlf= input) втратите свій CRLF у стилі Windows після циклу оформлення замовлення (його замінить LF у стилі unix). Не використовуйте inputпід вікнами.

Ще один спосіб показати, як autocrlfпрацює

1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x

де x або CRLF (у стилі windows), або LF (unix-стиль), і стрілки означають

file to commit -> repository -> checked out file

Як виправити

Значення за замовчуванням core.autocrlfвибирається під час встановлення git і зберігається в загальносистемній системі gitconfig (%ProgramFiles(x86)%\git\etc\gitconfig ). Також є (каскадні в такому порядку):

   - "глобальний" (на користувача) gitconfig, розташований у ~/.gitconfig, ще інший
   - "глобальний" (на кожного користувача) gitconfig у $XDG_CONFIG_HOME/git/configабо $HOME/.config/git/configта
   - "локальний" (per-repo) gitconfig .git/configу робочому режимі.

Отже, напишіть git config core.autocrlfу робочий dir, щоб перевірити поточно використане значення та

   - додати autocrlf=falseдо загальносистемного рішення gitconfig # за системою
   - git config --global core.autocrlf false            # рішення на користувача
   - git config --local core.autocrlf false              # рішення за проект

Попередження
- git configналаштування можуть бути замінені gitattributesналаштуваннями.
- crlf -> lfперетворення відбувається лише при додаванні нових файлів, crlfфайли, які вже є в репо-репо, не впливають.

Мораль (для Windows):
    - use core.autocrlf= trueякщо ви плануєте використовувати цей проект також під Unix (і не бажаєте конфігурувати редактор / IDE для використання закінчень рядків Unix),
    - use core.autocrlf= falseякщо ви плануєте використовувати цей проект лише під Windows ( або ви налаштували редактор / IDE для використання закінчень рядків Unix),
    - ніколи не використовуйте core.autocrlf=, inputякщо у вас немає вагомих причин ( наприклад, якщо ви використовуєте утиліти unix під Windows або якщо у вас виникли проблеми з makefiles),

PS Що вибрати при установці git для Windows?
Якщо ви не збираєтесь використовувати жоден із своїх проектів під Unix, не погоджуйтесь із першим варіантом за замовчуванням. Виберіть третій ( Оформити замовлення як є, зробити так, як є ). Ви не побачите це повідомлення. Колись.

PPS Мої особисті переваги - налаштування редактора / IDE для використання закінчень у стилі Unix та налаштування core.autocrlfна false.


28
За кількість часу, який я витратив, щоб досягти цього далеко, я сподівався на core.crlf = rackoff ;-)
PandaWood

10
Я реструктуризував вміст, можливо, це буде простіше читати таким чином
Ентоні Хеткінс

7
вибачте, я сподіваюся, що мій коментар не сприйняли як критику вашої відповіді. Я маю на увазі під «досягти цього далеко», перш ніж знайти цю відповідь.
PandaWood

10
Це так заплутано. У мене в редакторі встановлено НЧ. У коді репо використовується LF. глобальний autocrlf встановлений на false, а основна gitconfig в моєму домашньому режимі встановлена ​​на false. Але я все одно отримую повідомлення, що LF замінюється на CRLF
isimmons

17
Якщо ви налаштували редактор використовувати закінчення у стилі Unix, чому б не встановити core.autocrlfвведення? З того, що я зібрав з вашої відповіді, налаштування його на введення гарантує, що сховище та робочий каталог завжди мають закінчення рядків у стилі unix. Чому ви ніколи цього не хочете в Windows?
Hubro

763

У Git є три режими поводження з закінченнями рядків:

$ git config core.autocrlf
# that command will print "true" or "false" or "input"

Ви можете встановити режим використання, додавши додатковий параметр trueабоfalse до вищевказаного командного рядка.

Якщо core.autocrlfвстановлено значення true, це означає, що кожного разу, коли ви додасте файл до git repo, який Git вважає текстовим файлом, він перетворить усі закінчення рядка CRLF у лише LF, перш ніж зберігати його у коміті. Кожного разуgit checkout щось , усі текстові файли автоматично конвертують рядки LF у закінчення CRLF. Це дозволяє розробляти проект на платформах, які використовують різні стилі закінчення рядків, без комітів, щоб бути дуже галасливими, оскільки кожен редактор змінює стиль закінчення рядка, оскільки стиль закінчення рядків завжди послідовно LF.

Побічним ефектом цього зручного перетворення, і це те, про що ви бачите попередження, полягає в тому, що якщо текстовий файл, який ви автором, спочатку мав закінчення LF замість CRLF, він буде зберігатися з LF, як зазвичай, але при встановленні пізніше він матиме закінчення CRLF. Для звичайних текстових файлів це, як правило, добре. Попередження в цьому випадку є "для вашої інформації", але у випадку, якщо git неправильно оцінює двійковий файл як текстовий файл, це важливе попередження, оскільки git тоді пошкодить ваш двійковий файл.

Якщо core.autocrlfвстановлено значення false, ніколи не відбувається жодне закінчення рядків, тому текстові файли перевіряються як є. Зазвичай це нормально, якщо всі ваші розробники знаходяться або в Linux, або всі в Windows. Але в моєму досвіді я все ще прагну до отримання текстових файлів із змішаними закінченнями рядків, які в кінцевому підсумку спричиняють проблеми.

Моє особисте вподобання - залишити налаштування увімкненим, як розробник Windows.

Дивіться http://kernel.org/pub/software/scm/git/docs/git-config.html для оновленої інформації, що включає значення "введення".


116
Як сказано тут ( stackoverflow.com/questions/1249932/… ), я з повагою не погоджуюся і залишаю це налаштування ВИМКНЕНО (і використовую Блокнот ++ або будь-який інший редактор, здатний боротися - і залишити таким, яким він є - будь-який символ кінця рядка це знаходить)
VonC

23
Мені подобається ця відповідь, і я вважаю за краще залишити autocrlf встановленим на істинному. Як альтернатива, чи існує спосіб вбити попереджувальні повідомлення автоматично?
Krisc

12
Було б непогано доповнити цю добре написану відповідь порівнянням із core.eolналаштуваннями, можливо, в згоді з .gitattributesконфігурацією. Я намагався з'ясувати відмінності та перекриття шляхом експериментів, і це дуже заплутано.
seh

5
Для більш постійного рішення змініть свій .gitconfig на: [core] autocrlf = false
RBZ

9
Чи є який-небудь простий спосіб просто пронести попередження? Я хочу, щоб це було правдою і знаю, що я встановив його як істинне. Мені не потрібно постійно бачити всі попередження ... Це нормально, справді ...: p
UmaN

158

Якщо ви вже перевірили код, файли вже індексуються. Після зміни налаштувань git скажіть:

git config --global core.autocrlf input 

вам слід оновити індекси

git rm --cached -r . 

і переписати індекс git за допомогою

git reset --hard

https://help.github.com/articles/dealing-with-line-endings/#refreshing-a-repository-after-changing-line-endings

Примітка. Це дозволить видалити ваші локальні зміни, подумайте про їх приховування до цього.


23
Дякуємо вам за простий, кросплатформенний, зрозумілий спосіб виправити це, а не за велику дискусію про значення конфігурації.
Еріс

2
якщо скинути git - важко, чи можливо, мої локальні зміни будуть втрачені? я просто дотримуюся всіх коментарів, зазначених вище
Фредді Сидаурук

5
Так, ваші локальні зміни будуть втрачені. Параметр --hard скидає індекс і робоче дерево, тому будь-які зміни відслідковуваних файлів будуть відкинуті. git-scm.com/docs/git-reset
Жак

2
Що таке значення git rm --cached -r .? Чому git reset --hardнедостатньо?
gavenkoa

2
@gavenkoa @max Потрібно, git rm --cached -r .якщо ви зробите це git reset --hardпісля зміни core.autocrlfналаштування, воно не перетворить закінчення рядків. Потрібно очистити індекс git.
wisbucky

79
git config core.autocrlf false

6
не забудьте запустити цей корінь всередині сховища
Хаммад Хан

23
Я не розумію, чим це може бути корисно. Половині людей потрібна функція autocrlf, щоб вона працювала, інша половина - це неправда / введення. Отже, що, чи повинні вони випадковим чином кидати ці одноразові відповіді на стінку консолі, поки щось не приклеїться і щось подібне? Це не продуктивно.
Зоран Павлович

Я отримую помилку "fatal: not in git directory". Я намагався CD на C: \ Program Files \ Git and C: \ Program Files \ Git \ bin
pixelwiz

2
@mbb установка autcrlfдля falseвсього плоскодонки питання для кожного користувача вашого проекту.
jpaugh

5
@pixelwiz: ця команда встановлює властивість лише для проекту (тому для його запуску потрібно знаходитись у сховищі git). Якщо ви хочете встановити це глобально, використовуйте git config --global core.autocrlf falseзамість цього.
Michaël Polla

48

Обидва Unix2Dos і dos2unix доступні в вікнах з gitbash. Ви можете використовувати наступну команду для здійснення перетворення UNIX (LF) -> DOS (CRLF). Отже, ви не отримаєте попередження.

unix2dos filename

або

dos2unix -D filename

Але не запускайте цю команду в будь-якому наявному файлі CRLF, тоді ви отримаєте порожні нові рядки кожен другий рядок.

dos2unix -D filenameне працюватиме з кожною операційною системою. Перевірте це посилання на сумісність.

Якщо з якоїсь причини вам потрібно змусити команду, тоді використовуйте --force. Якщо він каже недійсний, тоді використовуйте -f.


8
Що це робить?
Салман фон Аббас

1
Ось що говорить варіант довідки: `--u2d, -D виконайте UNIX -> перетворення DOS`
Larry Battle

1
@Rifat Я розгублений. У вашому коментарі йдеться про те, що dos2unix -Dконвертувати закінчення рядків Windows у закінчення рядків Linux. Хіба це не те саме, що перетворення DOS (CRLF) -> UNIX (LF). Однак dos2unix -hзазначено, що -Dбуде виконано перетворення UNIX (LF) -> DOS (CRLF). dos2unix Більше інформації: gopherproxy.meulie.net/sdf.org/0/users/pmyshkin/dos2unix
Битва Ларрі

1
@LarryBattle Так, ти маєш рацію про -D. Власне, я опублікував відповідь, коли я був користувачем Windows. І я зробив коментар більше року пізніше, коли я користувач Mac: D BTW, Дякую за уточнення.
Rifat

1
Це працювало для мене. Я використовую Cygwin, який, схоже, не підтримує перемикач -D, але є команда "unix2dos", яка робить те саме. Хочеться, щоб я знав, що спричинило проблему - у мене є core.autocrlf = false, і це сховище лише для Windows.
Річард Бейер

27

Я думаю, що відповідь @ Basiloungas близька, але застаріла (принаймні, на Mac).

Відкрийте файл ~ / .gitconfig і встановіть safecrlfзначення false

[core]
       autocrlf = input
       safecrlf = false

Це * змусить ігнорувати кінець рядка char очевидно (все одно для мене працювало).


1
Це має бути safecrlf(з 'f')
alpipego

21

Стаття GitHub про закінчення рядків зазвичай згадується, коли йдеться про цю тему.

Мій особистий досвід використання часто рекомендованих core.autocrlfналаштувань конфігурації був дуже неоднозначним.

Я використовую Windows разом із Cygwin, маючи справу з проектами Windows та UNIX у різний час. Навіть у моїх проектах Windows іноді використовуються bashсценарії оболонки, для яких потрібні закінчення рядків UNIX (LF).

Використання GitHub рекомендується core.autocrlf налаштування для Windows, якщо я перевіряю проект UNIX (який прекрасно працює на Cygwin - або, можливо, я беру внесок у проект, який я використовую на моєму сервері Linux), текстові файли перевіряються в Windows (CRLF ) закінчення рядків, створюючи проблеми.

В основному, для змішаного середовища, як у мене, встановлення глобального core.autocrlfна будь-який із варіантів не спрацює добре в деяких випадках. Цей параметр може бути встановлений на локальному (сховищі) git config, але навіть це не буде досить добре для проекту, який містить речі, пов’язані з Windows і UNIX (наприклад, у мене є проект Windows з деякими bashскриптами утиліти).

Найкращий вибір, який я знайшов, - це створити файли .gitattributes на репозиторій . У статті GitHub згадується про це.
Приклад із цієї статті:

# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text

# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

В одному зі сховищ мого проекту:

* text=auto

*.txt         text eol=lf
*.xml         text eol=lf
*.json        text eol=lf
*.properties  text eol=lf
*.conf        text eol=lf

*.awk  text eol=lf
*.sed  text eol=lf
*.sh   text eol=lf

*.png  binary
*.jpg  binary

*.p12  binary

Налаштувати трохи більше речей, але робити це один раз за проект, і будь-який учасник, який працює на будь-якій ОС, не повинен мати проблем із закінченнями рядків під час роботи з цим проектом.


Зустрічаючи це зараз, намагаюся керувати репо з сценаріями Cygwin серед інших основних текстових файлів. Як би ви обробляли файли без розширення (наприклад, "fstab", "sshd_config")? Пов'язана стаття не стосується цього сценарію.
Майк Лукс

1
@MikeLoux Спробуйте цей метод: stackoverflow.com/a/44806034/4377192
Джин Павловський

Я виявив, що text=false eol=falseпрацював дещо аналогічно binary. Це правильно звучить? Можливо, буде корисно вказати "Я знаю, що це текстові файли, але я не хочу, щоб вони нормалізувалися"
joeytwiddle

18

Відкрийте файл vim (наприклад:) :e YOURFILEENTER, потім

:set noendofline binary
:wq

2
Просте редагування з vimфайлом залишило б незакінченим весь рядок.
Око

У мене виникли проблеми з деякими файлами Cocoapods. Вище зафіксовано більшість із них; для решти s / {control-v} {control-m} // зробив трюк. Два контрольних коду разом складають ^ M, який ми з ОС X X часто бачимо у файлах Windows.
janineanne

14

У мене теж була ця проблема.

SVN не здійснює перетворення, що закінчується рядком, тому файли виконуються з недоторканими кінцями рядків CRLF. Якщо ви використовуєте git-svn для введення проекту в git, то закінчення CRLF зберігаються в сховищі git, не те, що держава git очікує опинитися в - за замовчуванням має бути лише закінчення рядків unix / linux (LF) зареєстрований.

Після того, як ви перевіряєте файли у Windows, перетворення autocrlf залишає файли недоторканими (оскільки вони вже мають правильні закінчення для поточної платформи), однак процес, який вирішує, чи є різниця із перевіреними файлами, виконує зворотне перетворення перш ніж порівнювати, в результаті чого порівнюється те, що він вважає LF у перевіреному файлі з несподіваним CRLF у сховищі.

Наскільки я бачу, ваш вибір:

  1. Повторно імпортуйте свій код у новий сховище git, не використовуючи git-svn, це означатиме, що закінчення рядків перетворюються в Inicial git-коміті - всі
  2. Встановіть autocrlf на значення false, і ігноруйте той факт, що закінчення рядків не є в бажаному стилі git
  3. Ознайомтеся з файлами з вимиканням функції autocrlf, виправте всі закінчення рядків, перевірте все назад і знову ввімкніть його.
  4. Перепишіть історію вашого сховища, щоб оригінальний комітет більше не містив CRLF, якого git не очікував. (Застосовуються звичайні застереження щодо переписування історії)

Виноска: якщо ви виберете варіант №2, то мій досвід полягає в тому, що деякі допоміжні інструменти (перезавантаження, виправлення тощо) не справляються з файлами CRLF, і ви рано чи пізно ви отримаєте файли з сумішшю CRLF та LF (непослідовний рядок закінчення). Я не знаю жодного способу отримати найкраще з обох.


2
Я думаю, що є 4-й варіант додати до свого списку, якщо припустити, що ви можете дозволити собі переписати історію: Ви можете взяти gpo repo, який ви спочатку створили з git-svn, і переписати його історію, щоб більше не було ліній каналів CRLF. Це дасть вам нормалізовані канали ліній, що розширюються назад у всій історії svn. Користувач keo представляє одне рішення на сайті stackoverflow.com/a/1060828/64257 .
Кріс

Про вашу виноску: rebaseнемає проблем із CRLF. Єдина проблема, про яку я знаю, - це те, що стандартний інструмент злиття git вставлятиме свої конфліктні маркери ("<<<<<<", ">>>>>>" тощо) лише з LF, тому файл із маркерами конфлікту буде мають змішані закінчення рядків Однак, як тільки ви видалите маркери, все добре.
sleske

Можливо, поводження з git змінилося за останні 3 роки, це був мій безпосередній досвід роботи з ним у той час, мені не потрібно було ще раз переглядати цю проблему. ymmv.
Тім Абелл

1
@sleske start git 2.8, маркери злиття більше не будуть вводити змішане закінчення рядка. Див stackoverflow.com/a/35474954/6309
VonC

@VonC: Це круто. Добре знати, коли мені потрібно працювати в Windows.
sleske

11

Видалення нижче з файлу ~ / .gitattributes

* text=auto

не дасть Git в першу чергу перевірити закінчення рядків.


6
Неправильно. Цей рядок, якщо він присутній, замінить конфігурацію core.autocrlf. Якщо для цього встановлено значення "true", то ні, видалення цього рядка не завадить git перевірити закінчення рядка.
Арафангіон

1
Тим не менш, якщо core.autocrlf встановлено false, якщо цей не буде видалено, встановлення autocrlf у значення false не дуже допоможе, тому цей допоміг мені (але сам по собі недостатній).
Матті

2
Оголошення цього !! Хоча частина "не дозволить git перевірити" технічно не є правильною, це ТІЛЬКИЙ відповідь, який конкретно згадує про text=налаштування .gitattributes(який, якщо він присутній, БУДЕ блокатором). Тож інші відповіді є неповними. Я збирався горіхи , намагаючись зрозуміти, чому мої файли продовжували відображатися як «модифіковані» незалежно від того , скільки разів я змінив мою autocrlfі safecrlfнастройку і перевірив і очистив кеш GIT & жорсткий скидання.
jdunk

9

Він повинен читати:

попередження: ( Якщо ви перевірите це / або клонуєте до іншої папки з поточним core.autocrlftrue ,) LF буде замінено на CRLF

Файл матиме оригінальні закінчення рядків у вашому ( поточному ) робочому каталозі.

Ця картина повинна пояснити, що це означає. введіть тут опис зображення


Це також означає, що те, що надсилається до Subversion (якщо ви це зробите), матиме конверсію.
jpaugh

9

http://www.rtuin.nl/2013/02/how-to-make-git-ignore-different-line-endings/

echo "* -crlf" > .gitattributes 

Зробіть це на окремому фіксації чи git все ще може бачити цілі файли як змінені під час внесення однієї зміни (залежно від того, чи ви змінили параметр autocrlf)

Цей справді працює. Git поважатиме закінчення рядків у змішаних проектах, що закінчуються, і не попереджатиме вас про них.


2
Це особливо корисно, коли ви хочете конвертувати між CRLF і LF, але у вас є кілька .sh файлів, які повинні залишатися недоторканими. Я *.sh -crlfвесь час використовую ...
MartinTeeVarga

8

Я мало знаю про git в Windows, але ...

Мені здається, що git перетворює формат повернення відповідно до формату запущеної платформи (Windows). CRLF - це формат повернення за замовчуванням у Windows, тоді як LF - це формат повернення за замовчуванням для більшості інших ОС.

Швидше за все, формат повернення буде відрегульований належним чином при переміщенні коду в іншу систему. Я також вважаю, що git досить розумний, щоб зберігати бінарні файли неушкодженими, а не намагатися перетворити LF в CRLF в, скажімо, JPEG.

Підсумовуючи це, напевно, вам не потрібно занадто сильно хвилюватися над цією конверсією. Однак, якщо ви збираєтесь архівувати свій проект у вигляді тарболу, колеги-кодери, ймовірно, будуть вдячні мати лінійні термінатори, а не CRLF. Залежно від того, скільки ви дбаєте (і залежно від того, що ви не використовуєте Блокнот), ви можете встановити, що git використовує повернення LF, якщо можете :)

Додаток: CR - код ASCII 13, LF - код ASCII 10. Таким чином, CRLF - це два байти, тоді як LF - один.


5
Оскільки, схоже, ніхто цього не сказав, CR означає "Повернення перевезення", а LF - "Подача лінії". В якості другої примітки, багато редакторів Windows мовчки змінять текстовий файл із символом LF, що позначає новий рядок, а замість цього є парою символів CRLF. Користувача редактора навіть не попередитимуть, але Git побачить зміни.
користувач2548343

6

Переконайтеся, що ви встановили найновіший git.
Я робив як вище git config core.autocrlf false, коли використовував git (версія 2.7.1), але це не спрацювало.
Тоді він працює зараз, коли оновлення git (з 2.7.1 до 2.20.1).


Я думаю, ти мав на увазі, що ти маєш git 2.17.1. У мене була така ж проблема, і я зробив оновлення, і це також виправлено. Радий, що я побачив вашу відповідь!
Філіп Мак-Маллен

4
  1. Відкрийте файл у Блокноті ++.
  2. Перейдіть до редагування / редагування EOL.
  3. Клацніть на Формат Windows.
  4. Збережіть файл.

1
Спробуйте також скористатися, git config --global core.autocrlf falseщоб Git не встановлював закінчення рядка Unixна коміт. Слідкуйте за тим, git config core.autocrlfщоб перевірити, чи дійсно встановлено значення false.
Контанго

4

Питання OP пов'язане з Windows, і я не міг використовувати інших, не переходячи до каталогу або навіть запустивши файл у Notepad ++, оскільки адміністратор не працював. Тому довелося пройти цей маршрут:

C:\Program Files (x86)\Git\etc>git config --global core.autocrlf false

2

Багато текстових редакторів дозволяють вам змінити LF, див. Інструкції Atom нижче. Просте і явне.


Клацніть CRLFправоруч внизу:

введіть тут опис зображення

Виберіть LFспадне меню вгорі:

введіть тут опис зображення


1

У підказці оболонки GNU / Linux команди dos2unix & unix2dos дозволяють легко конвертувати / форматувати файли, що надходять із MS Windows


1

CRLF може спричинити певні проблеми під час використання вашого "коду" у двох різних ОС (Linux та Windows). Мій скрипт python був написаний у контейнері docker для Linux, а потім його натискали за допомогою Windows git-bash. Це дало мені попередження, що LF буде замінено CRLF. Я не замислювався над цим, але тоді, коли пізніше я почав сценарій, він сказав /usr/bin/env: 'python\r': No such file or directory. Тепер, коли \rдля вас розгалуження. Windows використовує "CR" - повернення каретки - поверх '\ n' як новий символ рядка - \n\r. Це те, що вам, можливо, доведеться врахувати.


0

Більшість інструментів у Windows приймає лише текстові файли у текстових файлах. Наприклад, ви можете керувати поведінкою Visual Studio у файлі під назвою '.editorconfig' із таким прикладом вмісту (частини):

 indent_style = space
 indent_size = 2
 end_of_line = lf    <<====
 charset = utf-8

Тільки оригінальний блокнот Windows не працює з LF, але є ще кілька належних простих інструментів редактора!

Отже, ви повинні використовувати LF і в текстових файлах у Windows. Це моє повідомлення, рекомендовано строгі! Немає підстав використовувати CRLF у Windows!

(У тій же дискусії використовується \ in include paths у C / ++; це фігня, використовуйте #include <pathTo / myheader.h> з косою рисою! Це стандарт C / ++ і всі компілятори microsoft підтримують його).

Отже, правильна настройка git

git config core.autocrlf false

Моє повідомлення: Забудьте про такі старі програми мислення, як dos2unix та unix2dos. Поясніть у своїй команді, що LF належним чином використовувати під Windows.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.