Git įsipareigojimas gauti mirtiną klaidą "mirtinas: CRLF bus pakeistas į LF"

Aš naudoju Ubuntu 13.10 x64, ir dirbau projekte, kurį kai kurie kūrėjai naudoja „Windows“, neseniai core.eol „git config core.eol į „lf“ ir „ core.autocrlf į „input“ ir core.safecrlf į „true“. Kadangi bandydamas perkelti failą į savo vietinę saugyklą, gaunu šią klaidą:
fatal: CRLF would be replaced by LF in ......
Iš to, ką suprantu, jei aš nustatysiu core.eol į "lf" ir core.autocrlf į "įvestį", git automatiškai konvertuos CRLF į LF, bet kodėl ši klaida atsiranda? Kaip išspręsti šią problemą?

Ačiū.

67
24 нояб. nustatė aserww106 24 nov. 2013-11-24 01:22 '13 ne 1:22 2013-11-24 01:22
@ 8 atsakymai

Tai klasikinė problema:

2019

184
24 нояб. Atsakymą pateikė VonC 24 nov. 2013-11-24 01:36 '13 ne 1:36 2013-11-24 01:36

Turėjau tą pačią problemą ir bandžiau pasiūlytą sprendimą be sėkmės.

Turėjau vykdyti antrą komandą, kad ji veiktų:

 $ git config --global core.autocrlf false $ git config --global core.safecrlf false 
45
30 июня '15 в 20:00 2015-06-30 20:00 Atsakymas pateikiamas 30 d., 15 val. 20:00 val. 2015-06-30 20:00
 $ git config core.autocrlf false 
27
21 марта '14 в 7:35 2014-03-21 07:35 atsakymas pateikiamas Arun, kovo 21 d., 14 val., 7:35, 2014-03-21 07:35

Galite tiesiog pabandyti dos2unix:

 dos2unix [filename] 
8
11 нояб. atsakymas duotas „ Yola“ lapkričio 11 d. 2015-11-11 10:43 '15 - 10:43 2015-11-11 10:43

Tai atsitiko su manimi tūkstančiais failų. Taigi, aš parašiau greitą bash scenarijų, kad ji būtų man skirta. Kažkas Linux arba „Mac“ gali rasti tai naudinga.

 #!/usr/bin/env bash unwindows() { local errmsg local fpath # base case errmsg="$(git add . 2> if [[ $? -eq 0 ]]; then echo 'Successfully converted CRLF to LF in all files.' echo 'Successfully ran "git add .".' echo 'Done.' return 0 fi fpath="${errmsg#*fatal: CRLF would be replaced by LF in }" fpath="${fpath%.*}" if [[ "${fpath}" == "${errmsg}" ]]; then err 'Regex failed. Could not auto-generate filename from stderr.' return 1 fi if [[ ! -e "${fpath}" ]]; then err "Regex failed. '${fpath}' does not exist." return 1 fi if ! dos2unix "${fpath}"; then err "Failed to run \"dos2unix '${fpath}'\"." return 1 fi # recursive case unwindows } err() { local -r msg="$1" echo "${msg}" > } unwindows 

Iš esmės jis stengiasi git add. Jei komanda nevykdoma, ji ištraukia nesuderinamą failo pavadinimą iš klaidos. Tada jis atlieka šio failo dos2unix . Jis ir toliau pakartoja šį procesą, kol bus git add. veikia.

Jei paleisite šį dos2unix: converting file xxx to Unix format... , turėtumėte matyti dos2unix: converting file xxx to Unix format... kelis kartus. Jei ne, tai neveikia, todėl tiesiog paspauskite ctrl + c arba komandą + c, kad jį sustabdytumėte.

4
05 нояб. atsakymą pateikė GreenRaccoon23 lapkritis 05 2016-11-05 08:13 '16 at 8:13 2016-11-05 08:13

Turite pridėti visus failus, kurių git status rodomas kaip modifikuoti:

 git add file1 git add file2 

Tada atlikite pakeitimus:

 git commit 

Tai išsaugos jūsų vietines rinkmenas taip, kaip bus, bet autocrlf jas nuotolinėje saugykloje.

0
21 янв. atsakymą pateikė Karl.S 21 jan. 2017-01-21 01:47 '17 ne 1:47 2017-01-21 01:47

Jūsų informacija, aš nesu įsitikinęs, ar tai tinka jums, bet aš gavau šią klaidą, kai atsitiktinai bandžiau pridėti visus node_modules į papildomus pakeitimus. Taigi .gitignoring node_modules išsprendė mano problemą.

0
10 янв. Atsakymas pateikiamas Nickofthyme 10 sausio 2019-01-10 17:44 '19, 17:44 pm 2019-01-10 17:44

Aš patyriau tą pačią problemą ir .gitattributes .gitattributes redagavimą kaip .gitattributes žemiau.

 $ vim .gitattributes 

komentuoti 2 eilutes .gitattributes

 -* text=auto -* text eol=lf +# * text=auto +# * text eol=lf 
0
11 окт. Kazma Arakaki atsakymas spalio 11 d 2018-10-11 06:53 '18 prie 6:53 2018-10-11 06:53

Peržiūrėkite kitus klausimus apie „ arba užduokite klausimą