Git pakeičia LF su CRLF

Paleiskite „git“ kompiuteryje, kuriame veikia „Windows XP“ su „bash“. Aš eksportavau savo projektą iš SVN, o paskui klonavau tuščią saugyklą.

Tada aš įterpiau eksportą į katalogą su tuščiomis saugyklomis ir:

 git add -A 

Tada gavau pranešimų sąrašą:

LF bus pakeistas CRLF

Kokios yra šios transformacijos pasekmės? Tai „.NET“ sprendimas „Visual Studio“.

683
28 дек. nustatykite mrblah 28 dec. 2009-12-28 02:21 '10, 02:21 am. 2009-12-28 02:21
@ 19 atsakymų

„Git“ turi tris eilutes:

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

Naudojimo režimą galite nustatyti pridedant papildomą parametrą true arba false į aukščiau nurodytą komandų eilutę.

Jei „ core.autocrlf nustatoma kaip tiesa, tai reiškia, kad kiekvieną kartą, kai įtraukiate failą į git repozitoriumą, kuris laikomas tekstiniu failu, jis užbaigia CRLF linijų pabaigą tik LF, kol jis bus išsaugotas įsipareigojime. Kiekvieną kartą gaudydami kasą, visi tekstiniai failai automatiškai turės LF linijos terminus, kurie bus konvertuoti į CRLF terminus. Tai leidžia jums sukurti projektą įvairiose platformose, kuriose naudojami skirtingi stiliai, išskyrus linijas, be jokių įsipareigojimų, kurie yra labai triukšmingi, nes kiekvienas redaktorius pakeičia linijos pabaigos stilių, nes linijos baigimo stilius visada yra LF.

Šį patogų konversijos šalutinį poveikį, ir tai įspėja jus apie tai, kad jei sukurtas tekstinis failas vietoj CRLF iš pradžių turėjo LF galus, jis bus saugomas su LF kaip įprasta, bet po to jis bus turi CRLF terminus. Normalių tekstinių failų atveju tai yra normalu. Šiuo atveju įspėjimas yra „už jūsų informaciją“, tačiau tuo atveju, jei git neteisingai vertina dvejetainį failą kaip tekstinį failą, tai yra svarbus įspėjimas, nes git iškraipys jūsų dvejetainį failą.

Jei „ core.autocrlf nustatytas kaip klaidingas, eilutės konvertavimo pabaiga niekada core.autocrlf , todėl tekstiniai failai yra tikrinami kaip „yra“. Tai paprastai veikia gerai, jei visi jūsų kūrėjai yra „Linux“ arba visi „Windows“. Tačiau, mano patirtimi, vis dar bandau gauti tekstinius failus su mišriomis linijų galūnėmis, kurios galiausiai sukelia problemų.

Mano asmeninis pageidavimas yra palikti nustatymą įjungtą kaip „Windows“ kūrėjas.

Jei norite gauti atnaujintą informaciją, kurioje yra įvesties vertė, žr. Http://kernel.org/pub/software/scm/git/docs/git-config.html .

708
28 дек. Atsakymą pateikė Andrew Arnott . 2009-12-28 07:37 '10, 7:37, 2009-12-28 07:37

Šie pranešimai yra susiję su neteisinga „ core.autocrlf „Windows“.

autocrlf sąvoka yra skaidrus autocrlf keitimo valdymas. Ir tai daroma!

Blogos naujienos: vertė turi būti konfigūruojama rankiniu būdu.
Geros naujienos: jūs turite tai padaryti vieną kartą per git diegimą (taip pat galima sukurti kiekvieną projektą).

Kaip veikia autocrlf :

 core.autocrlf=true: core.autocrlf=input: core.autocrlf=false: repo repo repo ^ V ^ V ^ V / \ / \ / \ crlf->lf lf->crl crlf->lf \ / \ / \ / \ / \ 

Čia crlf = eilutės pabaigos žymeklis laimėjimo stiliuje, lf = unix stilius (ir mac osx).

(išankstinis „osx cr neturi įtakos nė viena iš pirmiau minėtų parinkčių)

Kai pasirodo šis įspėjimas (pagal „Windows“)

- autocrlf = true jei viename iš failų yra Unix stiliaus lf (= RARELY),
- autocrlf = input jei viename iš failų yra crlf -style crlf (= beveik visada)
- autocrlf = false - NIEKADA!

Ką reiškia šis įspėjimas?

Įspėjimas „LF bus pakeistas CRLF“ sako, kad po patvirtinimo ciklo (turėdami autocrlf = true ) prarasite Unix tipo LF (jis bus pakeistas „Windows“ stiliaus CRLF). „Git“ nesitiki, kad naudosite „Unix“ tipo LF po „Windows“.

Įspėjimas „CRLF bus pakeistas LF“ sako, kad po patvirtinimo ciklo (su autocrlf = input ) prarasite „Windows“ stiliaus CRLF (jį pakeis LF Unix stiliaus). Nenaudokite input po >

Kitas būdas parodyti, kaip veikia autocrlf

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

kur x yra CRLF (Windows stiliaus) arba LF (Unix stiliaus), ir rodyklės žymi

 file to commit -> repository -> checked out file 

Kaip pataisyti

Numatytoji „ core.autocrlf reikšmė parenkama diegiant „git“ ir išsaugoma visos sistemos „gitconfig“ ( %ProgramFiles(x86)%\git\etc\gitconfig ). Taip pat yra (pakopinė tokia tvarka):

- "global" (vartotojui) gitconfig, esantis ~/.gitconfig , kitame
- "global" (vartotojui) gitconfig $XDG_CONFIG_HOME/git/config arba $HOME/.config/git/config ir
- „vietinis“ (per-repo) gitconfig .git/config darbiniame kataloge.

Taigi parašykite git config core.autocrlf veikiančiame git config core.autocrlf kad patikrintumėte dabartinę vertę ir

- pridėti sistemos „gitconfig #“ sisteminiam sprendimui „ autocrlf=false
- git config --global core.autocrlf false # sprendimas kiekvienam vartotojui
- git config --local core.autocrlf false # sprendimas kiekvienam projektui

Įspėjimai
- „ git config nustatymus galima panaikinti „ gitattributes nustatymais.
- crlf → lf konvertavimas įvyksta tik tada, kai pridedami crlf failai crlf tai neturi įtakos repo jau egzistuojantiems crlf failams.

Moralas („Windows“):
- naudokite core.autocrlf = true jei planuojate naudoti šį projektą taip pat pagal „Unix“ (ir nenorite pritaikyti redaktoriaus / IDE, kad galėtumėte naudoti „Unix“ linijų pabaigą),
- naudokite core.autocrlf = false jei planuojate naudoti šį projektą tik pagal „Windows“ (arba konfigūravote redaktorių / IDE naudoti „Windows“ linijų galus),
- niekada nenaudokite core.autocrlf = input jei neturite pagrįstų priežasčių (pvz., jei naudojate UNIX komunalines paslaugas po >

PS Ką pasirinkti, kai diegiate „git“ sistemai „Windows“?
Jei nenorite naudoti jokių „Unix“ projektų, nesutinku su pirmuoju pasirinkimu. Pasirinkite trečiąjį ( Checkout as is, fix as is ). Šis pranešimas nebus rodomas. Visada

PPS Mano asmeninis pageidavimas yra konfigūruoti redaktorių / IDE naudoti „Unix“ stiliaus galus ir nustatyti „ core.autocrlf į false .

693
18 дек. Atsakymą pateikė Antony Hatchkins gruodžio 18 d. 2013-12-18 11:30 '13, 11:30, 2013-12-18 11:30

Jei jau patikrinote kodą, failai jau yra indeksuojami. Pakeitus git parametrus, turite atnaujinti indeksus su

 git rm --cached -r . 

ir perrašykite git indeksą

 git reset --hard 

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

97
27 апр. atsakymas, kurį pateikė user2630328 Apr 27 2015-04-27 09:33 '15 at 9:33 2015-04-27 09:33
 git config core.autocrlf false 
76
21 марта '14 в 7:34 2014-03-21 07:34 atsakymą pateikė Arun, kovo 21 d., 14 d., 7:34, 2014-03-21 07:34

Tiek unix2dos, tiek dos2unix yra gitbash >

 unix2dos filename 

arba

 dos2unix -D filename 

Tačiau, nepaleiskite šios komandos bet kuriame esamame CRLF faile, tada kiekvieną antrą eilutę gausite tuščias naujas linijas.

dos2unix -D filename neveiks su kiekviena operacine sistema. Patikrinkite šios nuorodos suderinamumą.

Jei dėl kokių nors priežasčių turite priversti komandą --force , naudokite --force . Jei ji sako negaliojančią, naudokite -f .

46
02 мая '11 в 2:50 2011-05-02 02:50 atsakymą pateikė Rifatas gegužės 2 d. 11 d. 2:50 2011-05-02 02:50

Manau, kad @Basiloungas atsakymas yra artimas, bet pasenęs (bent jau „Mac“).

Atidarykite ~ / .gitconfig failą ir nustatykite „ safecrlf į false

 [core] autocrlf = input safecrlf = false 

Šis * padarys jį ignoruojantis char linijos pabaigą (matyt, jis vis tiek dirbo).

24
19 июля '14 в 11:10 2014-07-19 11:10 atsakymą pateikė Genija S., liepos 19 d., 14 d., 11:10, 2014-07-19 11:10

Vim, tada atidarykite failą (pvz., :e YOURFILE ENTER )

 :set noendofline binary :wq 
16
21 февр. Atsakymą pateikė Romanas Rhrn Nesterovas , vasario 21 d. 2012-02-21 13:08 '12, 13:08 2012-02-21 13:08

GitHub straipsnis eilutės pabaigoje paprastai paminėtas aptariant šią temą.

Mano asmeninė patirtis, naudojant dažnai rekomenduojamą core.autocrlf nustatymą, buvo labai įvairi.

Aš naudoju „Windows“ su „Cygwin“, dirbdamas su „Windows“ ir „UNIX“ projektais skirtingu laiku. Net mano „Windows“ projektuose kartais naudojami „ bash shell“ scenarijai, kuriems reikia UNIX linijų pabaigos (LF).

Naudojant „GitHub“, rekomenduojama įdiegti „ core.autocrlf “ sistemai „Windows“, jei patikrinu „UNIX“ projektą (kuris puikiai veikia „Cygwin“ - arba galiu prisidėti prie projekto, kurį naudoju „Linux“ serveryje), teksto failai įrašomi eilutės pabaigoje „Windows“ (CRLF), sukuriant problemas.

Iš esmės mišrioje aplinkoje, kaip man, pasaulinio core.autocrlf nustatymas bet kuriam parametrams kai kuriais atvejais neveiks. Šis parametras gali būti įdiegtas vietiniame (saugyklų) git konfigūracijoje, bet net ir tai nebus pakankamai gerai projektui, kuriame yra ir su „Windows“, ir „UNIX“ dalykų (pvz., Turiu „Windows“ projektą su kai kuriais „ bash įrankių scenarijais).

Geriausias pasirinkimas, kurį radau, yra sukurti .gitattributes saugyklų failus. GitHub straipsnis tai pamini.
Šio straipsnio pavyzdys:

 # 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 

Vienoje iš mano projektų saugyklų:

 * 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 

Tai yra dar keletas dalykų, kuriuos reikia sukurti, bet kiekvieną kartą atlikite vieną kartą, o bet kuriam kūrėjui bet kurioje OS neturėtų kilti problemų su linijos užbaigimu dirbant su šiuo projektu.

13
30 июля '16 в 22:32 2016-07-30 22:32 atsakymą pateikė Gene Pavlovskis liepos 30 d., 16 d., 22:32 2016-07-30 22:32

Aš taip pat turėjau šią problemą.

SVN nevykdo linijos konversijos, todėl failai priskiriami CRLF linijos pabaigai. Jei naudosite „git -svn“, norėdami įdėti projektą į gitą, tada CRLF pabaiga saugoma git saugykloje, o tai nėra gitinė būsena, kurią reikia rasti - pagal nutylėjimą naudojamas tik unix / linux (LF).

Kai peržiūrite failus „Windows“ sistemoje, autocrlf transformacija palieka failus nepaliestus (nes jie jau turi teisingas galias dabartinei platformai), bet procesas, kuris nusprendžia, ar skirtumas su patikrintais failais atlieka atvirkštinę transformaciją prieš palyginimą, kuris veda prie palyginimo. kuris, jo nuomone, yra LF išgautame faile su netikėta CRLF saugykloje.

Kaip matau jūsų pasirinkimą:

  • Pakartotinai importuokite savo kodą į naują „Git“ saugyklą, nenaudodami „git -svn“, tai reiškia, kad linijos pabaigos bus konvertuojamos į intial git įsipareigojimą
  • Nustatykite autocrlf į melagingą ir ignoruokite tai, kad linijos pabaiga nėra pageidaujamo stiliaus.
  • Patikrinkite savo failus su autocrlf, pataisykite visas linijos galas, patikrinkite viską ir vėl įjunkite.
  • Perrašykite savo kapinyno istoriją taip, kad originalus įsipareigojimas nebegali turėti CRLF, kurio nereikėjo git. (Taikomos įprastos atsakomybės atsisakymo istorijos sąlygos)

Išnaša: jei pasirinksite # 2 variantą, mano patirtis yra ta, kad kai kurie pagalbiniai įrankiai (perkrovimas, pleistras ir kt.) Nesusiję su CRLF failais, ir anksčiau ar vėliau baigsite failus su CRLF ir LF deriniu (ne iš eilės pabaigos) linijos). Nežinau, kaip gauti geriausius iš abiejų.

13
15 дек. Atsakymą pateikė Tim Abell . 2010-12-15 20:29 '10, 20:29, 2010-12-15 20:29

Pašalinkite žemiau iš ~ / .gitattributes

* text=auto

bus užkirstas kelias gitui tikrinti eilutes.

10
09 янв. Atsakymas yra suteiktas baziloungas 09 jan. 2013-01-09 12:36 '13, 12:36, 2013-01-09 12:36

Jis turėtų būti skaitomas:

įspėjimas: (Jei jį patikrinsite arba klonuosite kitame aplanke su dabartiniu pagrindiniu. Autocrlf yra true ,) LF bus pakeistas CRLF

Failo šaltinio eilutė baigiasi jūsų dabartiniame darbo kataloge.

Ši nuotrauka turėtų paaiškinti, ką tai reiškia. 2019

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

 echo "* -crlf" > .gitattributes 

Padarykite tai atskiru įvykiu arba git, vis tiek galite matyti, kad, keičiant vieną failą, keičiami visi failai (priklausomai nuo to, ar pakeitėte parametrą autocrlf)

Tai tikrai veikia. „Git“ gerbia linijų galus mišrių linijų užbaigimo projektuose ir ne įspės apie juos.

7
09 дек. Michael Ribbons atsakymas 09 Dec 2014-12-09 05:04 '14, 5:04 2014-12-09 05:04

Aš nežinau daug apie git į >

Man atrodo, kad git konvertuoja grąžinimo formatą į darbo platformą („Windows“). CRLF yra numatytasis grąžinimo formatas „Windows“, o LF yra daugumos kitų operacinių sistemų numatytasis grąžinimo formatas.

Labiausiai tikėtina, kad grąžinimo formatas bus tinkamai sukonfigūruotas, kai kodas bus perkeltas į kitą sistemą. Aš taip pat manau, kad git yra pakankamai protingas, kad binariniai failai būtų visiškai saugomi, o ne bandyti konvertuoti LF į CRLF, pavyzdžiui, JPEG formatu.

Taigi jums tikriausiai nereikia per daug nerimauti dėl šios konversijos. Tačiau, jei einate į archyvą savo projektą kaip paketą, koduotojai greičiausiai įvertins LF linijos terminalų buvimą, o ne CRLF. Priklausomai nuo to, kiek jums rūpi (ir priklausomai nuo to, ką nenaudojate „Notepad“), galite įdiegti „Git“, kad galėtumėte naudoti LF, jei galite :)

Priedas: CR yra ASCII kodas 13, LF yra ASCII kodas 10. Taigi, CRLF yra du baitai, o LF yra vienas.

6
28 дек. Joey Adams atsakymas gruodžio 28 d 2009-12-28 02:39 '10, 2:39, 2009-12-28 02:39
  • Atidarykite failą „Notepad ++“.
  • Eikite į Redaguoti / EOL konversiją.
  • Spustelėkite mygtuką „Formatuoti„ Windows “.
  • Išsaugokite failą.
4
15 окт. atsakymas pateikiamas 1991tama1991 15 okt. 2013-10-15 14:33 '13, 14:33 pm 2013-10-15 14:33

OP klausimas susijęs su >

 C:\Program Files (x86)\Git\etc>git config --global core.autocrlf false 
3
31 марта '15 в 17:39 2015-03-31 17:39 atsakymas pateikiamas kovo 31 d. 15 val. 17:39 2015-03-31 17:39

„GNU / Linux“ komandų „shell“ dos2unix ir „unix2dos“ komandos leidžia lengvai konvertuoti / formatuoti failus iš „MS Windows“

1
15 апр. Atsakyti Ronan 15 balandžio. 2011-04-15 09:33 '11 at 9:33 2011-04-15 09:33

Daugelis teksto redaktorių leidžia perjungti į „ LF , žr. Toliau pateikiamas „Atom“ instrukcijas. Paprasta ir aiški.


Paspauskite CRLF apačioje dešinėje:

2019

26 июня '18 в 21:51 2018-06-26 21:51 atsakymą pateikė JBallin birželio 26 d. 18 val. 9:51 val. 2018-06-26 21:51

Įsitikinkite, kad įdiegta naujausia „git“ versija.
Aš, kaip minėjau, padariau git config core.autocrlf false kai naudoju git (2.7.1 versija), tačiau jis neveikė.
Tada jis veikia dabar, kai atnaujinama git (nuo 2.7.1 iki 2.20.1).

0
16 дек. Atsakymas pateikiamas „ hyvi tan“ 16 d. 2018-12-16 06:35 '18, 6:35 ; 2018-12-16 06:35

CRLF gali sukelti tam tikrų problemų naudodamas „kodą“ dviejose skirtingose ​​operacinėse sistemose („Linux“ ir „Windows“). Mano „python“ scenarijus buvo parašytas „Linux“ doko talpykloje, o tada spustelėjo „Windows“ git-bash. Tai man davė įspėjimą, kad LF bus pakeistas CRLF. Nenorėjau apie tai galvoti, bet tada, kai vėliau pradėjau scenarijų, jis sakė: /usr/bin/env: 'python\r': No such file or directory . Dabar, su \r šakojimu už jus. „Windows“ naudoja „CR“ - važiuoklės grąžinimą „n“ viršuje kaip eilutės simbolį - \n\r . Tai gali tekti apsvarstyti.

0
04 дек. Atsakymas pateikiamas Kshitizo gruodžio 4 d. 2018-12-04 13:41 '18 - 01:41 pm 2018-12-04 13:41

Kiti klausimai apie žymę arba Užduoti klausimą