Git core.safecrlf skirtingas elgesys failuose su vienodais linijos galais

Turiu „Windows“ įrenginį su VS projektu, o „Visual Studio“ ir „Cygwin“ įrankius, įskaitant „Git“, naudoju. Kartais po redagavimo gaunu skirtingas linijų eilutes failuose. Noriu, kad paprastas sprendimas, kuriuo būtų galima patikrinti linijų seką, būtų baigta, kol jie persijungs į repo. Git core.safecrlf yra tai, ką manau. Dabar turiu keistą elgesį:

A ir B failai su šiais parametrais:

 $file A A: HTML document, UTF-8 Unicode text, with CRLF line terminators $file B B: HTML document, UTF-8 Unicode (with BOM) text, with CRLF line terminators 

Failas A jau yra repo režimu, failas B yra naujas. Pastaba: abu yra CRLF linijos pabaiga. Dabar pabandykite juos paleisti, core.safecrlf yra true .

 $git add A # ok $git add B # fails fatal: CRLF would be replaced by LF in B. 

Ar core.safecrlf naudoju core.safecrlf ? O gal man reikia parašyti nuorodą, kad galėtumėte patikrinti failus?

Pastabos:

  • Bandžiau su skirtingais failų kodais (su specifikacija ir be jos), be jokio skirtumo.
  • susijusi „ core.autocrlf funkcija „Git“, pridėjo ją prie žymių („Stackoverflow“ neturi žymos „ core.safecrlf )
  • git versija 1.8.5.rc1.17.g0ecd94d (parengta iš šaltinių Cygwin)

EDIT # 1: išleido core.autocrlf - tai buvo input . Pakeistas į false , dabar galiu pridėti abu failus. Kodėl

9
14 нояб. nustatė Rast 14 nov. 2013-11-14 15:48 '13, 15:48, 2013-11-14 15:48
@ 2 atsakymai

Pagal jūsų paskutinį pakeitimą pradinis nustatymas buvo core.autocrlf = input . Tokiu atveju CRLF parametras konvertuojamas į LF kai jis yra įdiegtas saugykloje, todėl jis išsaugomas ekstrahavimo metu. Tai reiškia, kad „Unix“ redaktorius, palaikantis linijos galus, pvz., „Notepad“, sugadins patvirtintos failo versijos išvaizdą ir jausmą. Tai bus viena milžiniška ilgoji linija.

FWIW core.autocrlf = input yra pageidaujamas diegimas „Unix“ sistemose, o numatytojo „ cygwin įrenginio naudojimas tikriausiai jį įdiegė. Windows sistemoje rekomenduojami nustatymai yra: core.autocrlf = true , kuriuos rekomenduoja msysgit

core.safecrlf = true nutraukia failo konvertavimą, jei failas yra pakeistas ir failas gali būti sugadintas, kai bus patikrintas failas, kuris atsiras, jei Notepad buvo redaktorius. Todėl failas B buvo nutrauktas, nes jis būtų sugadintas redaktoriuje, pvz., „Notepad“. Atkreipkite dėmesį į skirtumą tarp core.SAFEcrlf ir core.AUTOcrlf . Tai yra viena iš eyes glazing over problemomis suvokti git styginių galus.

core.autocrlf = false režimas nereikalingas. Jis tikrins ir tikrins failus tiksliai taip, kaip jie yra, todėl dabar įsipareigoja dirbti. Tai nėra labai patogu ir nerekomenduojama, nes ji sukelia problemų, jei failai redaguojami tiek „Windows“, tiek „Unix“ sistemose, taip pat jei kiti vartotojo core.AUTOcrlf parametrai yra skirtingi ir keičia failo pabaigą.

Mano pirmenybė yra nustatyti „ core.AUTOcrlf į „Windows“ input , jei visi „ Windows“ redaktoriai ir kiti teksto failų apdorojimo įrankiai yra žinutė apie „Unix“ linijos užbaigimą, kitaip nustatykite reikšmę „ core.autocrlf = true “ sistemai „Windows“ ir core.autocrlf = input „Unix“ core.autocrlf = input . Bet kuriuo atveju šis metodas yra pasenęs dėl puikaus „ .gitattributes failo metodo.

Failo metodas .gitattributes apdoroja failus pagal failo pavadinimą ir yra palaikomas visose naudotojų aplinkose, nes jis atsisiunčiamas į darbo katalogą, pvz., .gitignore . .gitattributes turi būti pridėta prie jūsų projekto susijusių pavadinimų ir failų tipų .gitattributes . Tada jūsų konfigūracija grįš į vietinius core.autocrlf ir core.safecrlf parametrus, jei failo pavadinimas neatitinka .gitattributes . Įtraukus * text=auto į .gitattributes pradžią, „ git “ geriausiai atspindi failų pavadinimus, kurie neatitinka vėlesnių .gitattributes nustatymų.

Šis tinklapis „ Mind the Your Line“ padėjo man geriau suprasti problemą. Daugiau informacijos apie šią problemą galite perskaityti.

23
10 янв. vfclists atsako 10 sausis 2014-01-10 17:22 '14, 17:22, 2014-01-10 17:22

CR LF linijos galo pasirinkimas nėra toks aiškus. Aprašymuose yra dvi vietos, kuriose jos aprašytos tiek „Git“, tiek „Git -config“ vadovuose.

Iš pradžių buvo automatiniai nustatymai, tada atsirado naujesnės versijos, turinčios tam tikrą nesuderinamumą (tai yra, netikėtus dalykus, kaip nurodote).

Bandau nustatyti eol = LF, kuris visus tekstinius failus nustato kaip LF linijos galus (galite nustatyti atributus, kuriuos failus laikoma tekstais), tada pridėkite safecrlf, kad patikrintumėte abiejuose galuose.

1
14 нояб. Atsakymą pateikė Philip Oakley lapkričio 14 d. 2013-11-14 21:07 '13, 21:07, 2013-11-14 21:07