in tech

Git a konce řádků

Věčný boj, částečně daný Windows, ale především nějakým dobrákem Git-vývojářem, který se snažil být nápomocný. Co je verzovacímu systému po konci řádků? Tady jsou poznámky, co jsem si udělal asi před půl rokem (v “originále”; občas prosím omluvte jazykovou rozpolcenost):

  • this is really fucked up
  • CRLF is fucked up
  • core.autocrlf false is fine until you want to enforce LF in the repo using * text=auto
  • when you do that, Git ignores core.autocrlf and will look at core.eol to see how to handle files on checkout, and it will use native by default which will convert LF to CRLF
  • there is NO WAY to tell Git “leave files alone on checkout” if you have .gitattributes. this is really sad
  • * text=auto eol=lf is fucked up too because for some reason, the eol=lf will also be applied to binary files.
  • (Git cannot force CRLF in the repo, only LF.)
  • (!eol – http://blog.subgit.com/tag/lf-will-be-replaced-by-crlf/)
  • Good read: http://www.hanselman.com/blog/YoureJustAnotherCarriageReturnLineFeedInTheWall.aspx

Naštěstí to vypadá, že Git 2.10 to opravil! Mělo by tak fungovat jednoduché * text=auto eol=lf v .gitattributes. Hurá!

Write a Comment

Comment

  1. “Co je verzovacímu systému po konci řádků?”
    Že by třeba kvůli “diff” nad textovými soubory, které mohly přijít z různých platforem? Když verzovací systém konce řádků neřešil, zase si lidé stěžovali na vadnou detekci změn, pokud soubor neupravili, ale jen jim editor změnil konce řádků na nativní.

    • IMO se to mělo udělat pořádně, nebo vůbec. Chování v 2.10 už je asi vyloženě dobré, ale trvalo to asi 15 major verzí (nebo kolik) a je to jediná část Gitu, která mě opakovaně frustrovala.