webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

`git status` и откриване на EOL

Когато правя git status виждам това:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   project/schema-readme.md
        modified:   project/vp-automate.php

Странното е, че тези два файла не всъщност са модифицирани - те са двоично еднакви, байт по байт.

Сега мисля, че знам защо са маркирани като модифицирани от Git: защото използват CRLF окончания на редове, докато нашият проект наскоро добави .gitattributes файл със следното съдържание:

* text=auto eol=lf

Това трябва да означава, че когато бъдат ангажирани, те действително ще бъдат актуализирани от Git, за да имат LF окончания на редове. Затова ли git status маркира тези файлове като "модифицирани", въпреки че в момента не са модифицирани?

РЕДАКТИРАНЕ: това е странно, има много повече файлове в моя проект, които използват CRLF окончания на редове и не се откриват като модифицирани.. Не разбирам какво е толкова специално за schema-readme.md и vp-automate.php, че Git ги открива като модифицирани.

25.11.2014

Отговори:


1

Git открива променени файлове въз основа на някои файлови атрибути в допълнение към SHA1 контролните суми, което може да е причина тези два файла да бъдат маркирани като променени. Повече информация за това как Git открива промените във файла е в отговор на този въпрос.

25.11.2014

2

Моля, опитайте да конфигурирате свойството core.autoccrlf. използва се предимно на машини с Windows, за да се увери, че локалните файлове използват CRLF за окончания на редове (така че работят в бележник и т.н.), докато файловете "вътре" в хранилището се съхраняват с "правилни" LF окончания.

От документите (git config --help):

   core.autocrlf
       Setting this variable to "true" is almost the same as setting the text attribute to "auto" on all files except that text files are not guaranteed to be normalized: files that contain CRLF in the repository will not be touched. Use this setting if you want to have CRLF line endings in
       your working directory even though the repository does not have normalized line endings. This variable can be set to input, in which case no output conversion is performed.

Вижте също https://help.github.com/articles/dealing-with-line-endings#platform-all - както е препоръчано, на linux трябва да го конфигурирате на "вход".

25.11.2014
  • Работата е там, че не искам CRLF - по различни причини имаме нужда от LF дори на Windows. Въпросът е единствено защо Git открива някои непроменени файлове като променени и дали има нещо общо с края на реда. 25.11.2014
  • Нови материали

    Записване на грешки — Как да записвате грешки във вашето приложение, за да ги отстраните по-късно
    Записването на грешки е важна част от „обработването на грешки“. Накратко, когато възникнат определени грешки в програмите, вие искате да знаете за това. Това е особено важно при грешки. Ти..

    Кратко въведение в теорията на графите
    Кратко въведение в теорията на графите Втора част: внедряване на python на пълни графики В моята предишна статия въведох три основни концепции за графите: върхове, ръбове и тегла. В тази..

    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано, искам...
    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано искам да обясня защо машинното обучение има значение. За да бъда съвсем..

    Какво е структурно типизиране и как Typescript го използва в своя полза?
    Всички знаят тези дни, че „Typescript е строго синтактично надмножество на JavaScript и добавя незадължително статично въвеждане към езика.“. Но какво всъщност означава? Защо миграцията от..

    3 начина за премахване на дубликати от масив в Javascript
    Вие сте уеб разработчик? Програмист ли си? Тогава ще сте запознати с JavaScript и различните му вградени функции, методи и т.н. за различни реализации, проблеми и цели. Един от тези широко..

    Архитектура и обучение на конволюционни невронни мрежи (7 точки):
    Тази публикация предоставя подробности за архитектурата на Конволюционната невронна мрежа (CNN), функциите и обучението на всеки слой, завършвайки с резюме на обучението на CNN...

    Създайте разширение за Chrome с помощта на Angular
    Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..