Завершение строк в следующем файле не является единообразным

Обновлено: 18.05.2024

Один из самых частых вопросов о Гите — почему так сложно работать с окончаниями строк. В этой статье мы попробуем ответить на этот вопрос и рассказать о множестве опций и настроек для контроля над окончаниями строк в Гите.

Гит имеет дело с двумя системами для работы с концами строк в репозиториях. Корень проблемы в том, что популярные операционные системы по-разному обозначают конец строки: Unix, Linux и Mac OS X используют LF , а Windows CRLF . В этой статье мы не будем брать во внимание, что в предыдущих версиях Mac OS X использовался CR .

Ничего из этого не было бы проблемой, если бы каждый из нас жил в своём маленьком, изолированном мире и никогда не обменивался кодом между разными операционными системами. Под обменом кодом, в данном случае, будем понимать всё — от работы над кросс-платформенным проектом до копирования кода из браузера. Всякий раз, когда вы скачиваете архив проекта с Гитхаба, копируете код из чьего-то блога или гиста или используете код из файла на облачном хранилище, вы работаете с текстом, а значит имеете дело с невидимыми символами окончаний строк.

Все эти действия с кодом потенциально могут привнести разные настройки окончаний строк в вашу кодовую базу. Это может привести к беспорядочным диффам и сделать работу с Гитом в целом неприятной.

Основное решение, которое принял Гит для этой проблемы — указать, что лучший способ хранить окончания строк в репозитории для текстовых файлов — использование LF . Это правило ни к чему вас не принуждает, но большинство разработчиков, использующих Гит и Гитхаб, приняли его как соглашение и мы тоже рекомендуем так настроить ваш конфиг.

Основы

Перед тем, как мы опишем настройки для управления окончаниями строк, нам надо узнать несколько вещей о core.eol и разобраться с тем, что значит записать что-либо в базу данных Гит.

Конец строки

core.eol — первый параметр, о котором нужно знать.

Почти всегда, кроме самых редких случаев, нам не стоит менять дефолтное значение этого параметра. Хотя сам по себе core.eol мало что делает, нам нужно знать его значение каждый раз, когда мы хотим, чтобы Гит изменил окончания строк. Так как этот параметр будет использоваться во всём, о чём пойдёт речь дальше, хорошо бы знать о его существовании и о том, что его значение, вероятно, менять не придётся.

  • core.eol = native — значение по умолчанию. При записи файла в рабочую папку, Гит изменит окончания строк на соответствующие вашей платформе по умолчанию. Для Windows это будет CRLF , для Unix, Linux и Mac OS X — LF ;
  • core.eol = crlf — если установлено такое значение, Гит всегда будет использовать для обозначения конца строки CRLF при записи файла в вашу рабочую директорию;
  • core.eol = lf — это значение скажет Гиту всегда использовать LF для обозначения конца строки при записи файла в вашу рабочую папку.

Чтобы узнать, какое значение core.eol установлено в вашей системе, нужно запустить в консоли команду git config --global core.eol . Если команда ничего не вернёт, значит, в вашей системе используется значение по умолчанию, native .

Запись и вывод объектов из базы данных

Прежде чем двигаться дальше, мы поговорим о двух важных операциях: записи в объектную базу и выводе данных из неё в рабочую директорию. Возможно, вы уже знаете, что Гит хранит свою базу данных в папке .git . Он создаёт эту директорию и несколько файлов в ней, после запуска команды git init . Файлы в папке .git определяют все конфигурации Гита, в них хранится история проекта. Это обычные файлы и мы можем их читать и редактировать так же, как файлы самого проекта.

Каждый раз, когда мы делаем команду типа git commit , мы записываем объекты в эту базу данных. Запись в базу данных включает в себя:

  • сохранение всего содержимого файла;
  • добавление его в список со всеми файлами, которые отслеживает Гит;
  • создание блоб-файла;
  • вычисление SHA-ключа — хэш-кода, в котором хранится информация о содержимом файла.

Во время записи в базу данных **Гит может запустить фильтры и преобразовать окончания строк.

Есть ещё один случай, когда у Гита появляется возможность преобразовать окончания строк — это запись файлов из базы данных в нашу рабочую папку. Это то, что мы подразумеваем под выводом из базы данных. Такой процесс можно запустить множеством команд, но самая очевидная и простая для понимания — git checkout . Вывод из объектной базы данных также происходит после запуска команд, которые делают изменения в нашей рабочей папке, например, git clone или git reset .

Старая система

Теперь давайте поговорим о старой системе — оригинальном наборе функций в Гите, предназначенном для решения конкретной проблемы с окончаниями строк. Есть большая вероятность, что вы прямо сейчас пользуетесь старой системой и даже не подозреваете об этом.

Вот как это работает: у Гита есть настройка конфигураций core.autocrlf , которая специально создана для того, чтобы все окончания строк в текстовом файле преобразовывались в LF при записи в объектную базу данных репозитория. Вот список разных настроек для core.autocrlf и их значений:

  • core.autocrlf = false — это значение по умолчанию, которое большинству людей следует сменить. Результатом использования этого значения станет то, что Гит не будет связываться с окончаниями строк в ваших файлах. Там могут быть разные окончаниями строк: LF , CRLF , CR или микс из всех них, но Гиту это будет безразлично. Такое значение может привести к тому, что диффы станут менее читаемыми и появятся сложности при слиянии веток. У большинства пользователей Unix/Linux установлено именно это значение, потому что у них нет проблем с CRLF и им не нужно, чтобы Гит делал дополнительную работу каждый раз при записи файлов в базу данных или в рабочую папку.
  • core.autocrlf = true — значит, что Гит обработает все текстовые файлы и убедится, что все CRLF заменены на LF перед записью в базу данных. При обратном процессе он преобразует все LF в CRLF . Такая установка гарантирует, что ваш репозиторий можно будет использовать на других платформах, сохраняя CRLF в вашем рабочей папке. Поэтому параметр true для core.autocrlf рекомендован для Windows.
  • core.autocrlf = input — значит, что Гит обработает все текстовые файлы и убедится, что все CRLF изменены на LF при записи файлов в базу данных. Однако обратной замены не произойдёт. При записи файлов в рабочую папку из базы данных, для обозначения конца строки останутся LF . Этот параметр обычно используется в Unix / Linux / OS X для предотвращения записи CRLF в репозиторий. Идея заключается в том, что если вы вставили код из браузера и случайно записали CRLF в один из ваших файлов, Гит удостоверится, что произойдёт замена на LF при записи в базу данных.

Чтобы увидеть, какое значение для core.autocrlf установлено в вашей системе, нужно запустить в командной строке git config --global core.autocrlf . Если команда ничего не вернёт, то вы используете значение по умолчанию, false .

Как же Гит определяет, что файл текстовый? Хороший вопрос. У Гита есть внутренний эвристический метод, который проверяет, двоичный ли файл. Если файл не двоичный, то Гит считает его текстовым. Но Гит иногда может ошибаться, и это будет причиной для знакомства со следующей настройкой.

Параметр core.safecrlf был создан на тот случай, если Гит ошибётся и изменит окончания строк там, где лучше было бы оставить их в покое.

  • core.safecrlf = true — перед записью в базу данных при подготовке к замене CRLF на LF , Гит убедится, что сможет успешно прервать операцию. Он проверит, что можно откатить изменения (из LF в CRLF ), а если нет, то отменит операцию.
  • core.safecrlf = warn — сделает то же, что и предыдущий параметр, но вместо того, чтобы прервать операцию, Гит просто предупредит вас о том, что может случиться что-то нехорошее.

Наконец, вы можете создать в корне своего репозитория файл .gitattributes и указать в нём настройки для конкретных файлов. Это позволит вам управлять такими настройками, как autocrlf для каждого типа файлов.

Например, для того, чтобы Гит заменил CRLF на LF во всех текстовых файлах, можно написать в .gitattributes такую строку:

Или можно сделать, чтобы Гит никогда не заменял CRLF на LF в текстовых файлах с помощью такой строки:

Чтобы Гит заменял CRLF на LF в текстовых файлах только при записи в базу данных, но возвращал LF при записи в рабочий каталог, нужно написать:

Хорошо, видите, какой беспорядок мы тут учинили? И он становится ещё больше, если мы начинаем работать над проектами, которые подталкивают нас к другим глобальным настройкам. Введём в дело новую систему, доступную начиная с версии Гит 1.7.2.

Новая система

Новая система определяет все настройки для окончаний строк в файле .gitattributes вашего репозитория, инкапсулируя их внутри и делая независимыми от глобальных настроек.

В новой системе за то, чтобы указать Гиту, в каких файлах надо заменить CRLF на LF , отвечаете вы, сообщая об этом с помощью атрибута text в файле .gitattributes . В этом случае будет полезен мануал для .gitattributes , а ниже вы найдёте несколько примеров использования атрибута text .

  • *.txt text — устанавливает атрибут text для всех текстовых файлов. Это значит, что Гит будет запускать процесс замены CRLF на LF каждый раз при записи в БД и делать обратную замену при выводе из базы данных в рабочий репозиторий.
  • *.txt -text — снимет со всех текстовых файлов этот фильтр. Это значит, что в указанных файлах не будет замены CRLF на LF .
  • *.txt text=auto — установит для всех, подходящих под условие файлов, замену CRLF на LF , если Гит с помощью своего эвристического метода определит эти файлы как текстовые, а не бинарные.

Если файл не определён, Гит вернётся к старой системе и настройке core.autocrlf .

Именно так работает обратная совместимость, но я рекомендую, особенно тем, кто использует Windows для разработки, явно создавать файл gitattributes.

Ниже пример файла .gitattributes с общими настройками, который можно использовать для своего проекта. Пример взят отсюда.

Как вы могли заметить, с помощью следующей команды можно сказать Гиту обнаруживать все текстовые файлы и автоматически конвертировать в них CRLF в LF :

Окончания строк в следующих файлах не совпадают. Хотите нормализовать окончания строк?

Затем он дает мне раскрывающийся список с различными стандартами или чем-то еще, например, Windows, Mac, Unix и парой стандартов Unicode.

Что это значит и что произойдет, если я нажму Yes ?

Обычно это означает, что у вас есть строки, заканчивающиеся чем-то другим, кроме пары возврата каретки / перевода строки. Это часто случается, когда вы копируете и вставляете с веб-страницы в редактор кода.

Нормализация окончаний строк - это просто обеспечение согласованности всех символов окончания строки. Он не позволяет одной строке заканчиваться на \r\n , а другой - на \r или \n ; первая - это пара конца строки Windows, а остальные обычно используются для файлов Mac или Linux.

Поскольку вы разрабатываете в Visual Studio, вы, очевидно, захотите выбрать «Windows» из раскрывающегося списка. :-)

Некоторые строки заканчиваются на \n .

Некоторые другие строки заканчиваются на \r\n .

Visual Studio предлагает сделать так, чтобы все строки заканчивались одинаково.

Если вы используете Visual Studio 2012:

Перейдите в меню ФайлДополнительные параметры сохранения → выберите Тип окончания строк как Windows (CR LF) .

Чтобы включить / выключить этот параметр, выполните следующие действия на панели меню :

ИнструментыПараметрыСредаДокументыПроверять согласованность окончаний строк при загрузке

Файл, который вы редактируете, был отредактирован другим редактором, в котором не используются одинаковые окончания строк, в результате чего получился файл со смешанными окончаниями строк.

Для окончания строки используются следующие символы ASCII:

CR, возврат каретки
LF, перевод строки

Windows = CRLF
Mac OS 9 или более ранней версии = CR
Unix = LF

Вам может помочь новая строка в Википедии. Вот отрывок:

Различные соглашения о новой строке часто приводят к неправильному отображению текстовых файлов, которые были переданы между системами разных типов. Например, файлы, созданные в системах Unix или Apple Macintosh, могут отображаться в виде одной длинной строки в некоторых программах, работающих в Microsoft Windows. И наоборот, при просмотре файла, созданного с компьютера Windows в системе Unix, дополнительный CR может отображаться как ^ M, или в конце каждой строки, или как второй разрыв строки.

Это означает, что, например, некоторые из ваших строк текста имеют <Carriage Return><Linefeed> (стандарт Windows), а некоторые заканчиваются только <Linefeed> (стандарт Unix).

Если вы нажмете «Да», концы строк в исходном файле будут преобразованы в один и тот же формат.

Это не повлияет на компилятор (поскольку конец строки считается просто пробелом), но может иметь некоторое значение для других инструментов (например, 'diff' в вашей системе управления версиями).

В целом (для разработки программного обеспечения) мы принимаем проблему окончания мультиплатформенной линейки, но позволяем программе контроля версий решать ее.

enter image description here

Окончание строки , также называемое новой строкой , концом строки (EOL) или разрывом строки , является управляющим символом или последовательностью управляющие символы в спецификации кодировки символов (например, ASCII или EBCDIC), которая используется для обозначения конца строки текста и начала новой. Некоторые текстовые редакторы устанавливают / реализуют этот специальный символ, когда вы нажимаете клавишу Enter .

Символы возврата каретки , перевода строки представляют собой символы ASCII для конца строки ( EOL ). Они закончат текущую строку строки и начнут новую.

Однако на уровне операционной системы к ним относятся иначе:

Символ возврата каретки ("CR") (ASCII 13 \ 0x0D, \ r) : перемещает курсор в начало строки без перехода к следующей строке. Этот символ используется в качестве символа новой строки в операционных системах Commodore и Early Macintosh (Mac OS 9 и ранее).

Символ перевода строки ("LF") (ASCII 10 \ 0x0A, \ n) : перемещает курсор вниз на следующую строку без возврата в начало строки. Этот символ используется в качестве символа новой строки в системах на базе Unix (Linux, macOS X, Android и т. Д.).

Символ перевода строки возврата каретки («CRLF») (0x0D0A, \ r \ n) . Фактически, это два символа ASCII, представляющие собой комбинацию символов CR и LF. Он перемещает курсор как вниз, так и на следующую строку, и в ее начало. Этот символ используется в качестве символа новой строки в большинстве других операционных систем, отличных от Unix, включая Microsoft Windows и Symbian OS.

Нормализация несовместимых окончаний строк в Visual Studio означает выбор одного типа символов, который будет использоваться для всех ваших файлов. Возможно:

  • Символ перевода строки возврата каретки ("CRLF")
  • Символ перевода строки ("LF")
  • Символ возврата каретки ("CR")

Однако вы можете настроить это лучше, используя файл .gitattributes в корневом каталоге, чтобы избежать конфликтов при перемещении файлов из одной операционной системы в другую.

Просто создайте новый файл с именем .gitattributes в корневом каталоге вашего приложения:

И добавьте в него следующее:

Это принудительно устанавливает символ окончания строки перевода строки в Unix.

Примечание : если это уже существующий проект, просто запустите эту команду, чтобы обновить файлы для приложения, используя новую определенную строку, заканчивающуюся, как указано в .gitattributes .

Надеюсь, это поможет

У меня была эта проблема в VS 2019, и я решил ее, установив конфигурацию LineBreak для Windows, прежде чем она была настроена для Unix.

Tools > Options > Format on Save > Settings > LineBreak: Windows

Скрипт Unity открывается с помощью VS, и окончания строк в следующих файлах несовместимы. Хотите стандартизировать окончания строк? "


Я считаю, что все сталкивались с этой проблемой. Давайте посмотрим, что происходит.

Ответ Baidu таков:

Это вызвано разными стандартами Windows и Unix . то есть проблемами "возврата каретки" и "перевода строки" .

«Возврат каретки» и «перевод строки» - это два невидимых управляющих символа в наборе символов ASCII . «Возврат каретки» - это CHAR (13), т.е. \ r . «Перевод строки» - это CHAR (10), т.е. \ n . Что касается "возврата каретки" и "перевода строки", заимствованных у пишущих машинок, я никогда не видел пишущей машинки или курсора в эпоху DOS. Боюсь, это непросто понять . потому что курсор в эпоху GUI может свободно перемещаться и без возврата каретки Значение.

В Unix «возврат каретки» не переносится, а «перевод строки» требует только «перевода строки» в конце строки . Но в Windows «возврат каретки» и «перевод строки» переносятся, «возврат каретки» «перевод строки» Это конец строки .

Поэтому текстовый редактор, отвечающий стандартам разработки Windows, напомнит вам, что редактируемый в данный момент текст не соответствует стандартам конца строки Windows.

Итак, как решить эту проблему?

Решение первое: Удалите отметку о конце строки или измените содержимое в конце строки, чтобы оно было единым.

Удалить конфигурацию проверки конца строки: В параметрах -> окружение -> документ есть ловушка «проверять согласованный конец строки при загрузке», и она не будет проверяться, если она будет удалена.


Конечно, если есть искаженные коды, это может быть связано с проблемами с кодировкой. Вы можете включить обнаружение UTF-8. Перейдите в Инструменты-> Параметры-> Текстовый редактор-> Автоматически определять кодировку UTF-8 без подписи и проверьте ее.


Выше информация от Baidu.

Однако есть второе решение, продолжайте смотреть вниз.

Решение второе (рекомендуется):

VS => Файл => Дополнительные параметры сохранения => Установить конец строки на


Откройте несколько шаблонов, о которых мы упоминали ранее, и сохраните их снова, чтобы решить эту проблему раз и навсегда.

Самая дорогая картина в истории — «Спаситель мира», в 2017 году проданная за $450,3 млн как работа Леонардо до Винчи, — не принадлежит кисти легендарного итальянца. Как выяснили «Известия», сегодня ведущие эксперты и музейные специалисты сходятся в том, что атрибутировать ее гению Возрождения нельзя. Кроме того, сомнительным оказался и заявленный провенанс (история владения) работы: в коллекции короля Англии Карла I точно был не этот, а московский «Спаситель мира» — авторства Джампетрино. О том, что выяснилось спустя четыре года после завершения торгов на аукционе Christie’s, сколько на самом деле может стоить скандальная картина и есть ли в этой громкой истории «русский след», — в материале «Известий».

Десять лет со «Спасителем»

Публичная история картины «Спаситель мира» начинается в конце 2011 года, когда она была представлена на выставке «Леонардо да Винчи: живописец при миланском дворе» в Лондонской национальной галерее. Заметим, с тех пор произведение ни разу не выставлялось в музеях. Но то единственное появление, однако, произвело эффект, и вскоре «Спаситель» был за $127,5 млн куплен российским олигархом Дмитрием Рыболовлевым. А несколько лет спустя — в 2017-м — Рыболовлев решил продать его на Christie’s.

Картина представляет собой деревянную доску (грецкий орех), на которой маслом изображен Иисус Христос. В его левой руке — хрустальная сфера, символизирующая земной шар, а правой рукой он делает благословляющий жест. Экспертизы показали, что доска была изготовлена около 1500 года. Теми же годами датируются и остатки оригинальной живописи.

По разным данным, Рыболовлев планировал выручить хотя бы $100 млн, но в итоге лот ушел за рекордные $450,3 млн (включая комиссию аукционного дома). Как позже сообщали авторитетные мировые СМИ, столь щедрым оказался наследный принц Саудовской Аравии Мухаммед бин Салман. Картину ждали на выставке Леонардо в Лувре в 2019 году, однако музей и владелец не смогли договориться о деталях экспонирования. Сообщалось, что принц требовал подписать «Спасителя» именно как работу Леонардо, Лувр же был согласен лишь на менее категоричную формулировку. Не помогли даже контакты на высшем уровне. В итоге парижские зрители так и не увидели эту вещь. Позже планировалось, что картина будет передана на постоянное экспонирование в Лувр Абу-Даби. Но и эти намерения пока не воплотились в жизнь.

123

«Спаситель мира», проданный в 2017 году как работа Леонардо да Винчи


На пути к Леонардо: что стоит за новым аукционным рекордом Картина Сандро Боттичелли стала самым дорогим произведением Раннего Возрождения

Новую волну обсуждений картины спровоцировал выход сразу двух документальных фильмов: The Lost Leonardo («Потерянный Леонардо») и The Savior for Sale («Спаситель на продажу»). Выводы обеих лент похожи. История «Спасителя мира» имеет больше отношения к коммерции, пиару и политике, чем к художественным открытиям. И хотя однозначного вердикта авторы не выносят, предоставляя слово сторонникам разных версий, становится ясно, что за прошедшие с момента той лондонской выставки 10 лет научное сообщество всё более скептически относится к атрибуции работы. И всё смелее опровергает авторство Леонардо.

Так, в каталоге новой выставки музея Прадо Leonardo and the copy of the Mona Lisa. New approaches to the artist’s studio practices (идет до февраля 2022 года) аукционный «Спаситель мира» даже не фигурирует в виде репродукции. В статье куратора экспозиции Аны Гонсалес Мозо эта вещь отнесена к числу «приписываемых» Леонардо. По мнению специалиста, у автора «Джоконды» действительно был «Спаситель мира», но он утерян, а проданная на Christie’s вещь — одно из повторений учеников. Причем, полагает Мозо, ближе к исходному произведению другое повторение, известное как Ganay version, то есть версия из коллекции маркиза де Гане, в 1999 году проданная на Sotheby’s за $332 тыс. (на фото ниже она справа).

123


«Сегодня вы сможете оказаться в Лувре почти в одиночестве» Директор Лувра Жан-Люк Мартинес — о встрече с Джокондой наедине, мерах безопасности и французах, которые не ходят в музеи

Вступительный текст к тому же каталогу написал Венсан Дельевен — хранитель отдела живописи Лувра, сокуратор луврской выставки Леонардо, участвовавший и в подготовке мадридской экспозиции: он не высказывает свое мнение об авторстве «Спасителя мира», однако сам факт появления его эссе в данном каталоге красноречив. Если бы Лувр придерживался принципиально иной позиции, нежели была озвучена основным автором каталога, такое соседство было бы невозможно.

На запрос «Известий» о позиции Лувра был получен ответ: «Музей не высказывается на эту тему».

Две картины, один король

Сомнительным, впрочем, оказалось не только авторство, но и провенанс. Как выяснилось, ключевой факт в истории ее владения — принадлежность королю Англии Карлу I — ничем не подтверждается. В собрании казненного монарха действительно была работа, названная в посмертной распродажной описи A peece of Christ done by Leonardo и, согласно тому же документу, проданная 23 октября 1651 года капитану Джону Стоуну за £30. Однако такие вещи помечались на обороте штампом CR (Carolus Rex) с короной над буквами. На аукционном «Спасителе мира» штамп отсутствует, зато он есть на «Спасителе» Джампетрино, хранящемся в Москве, в ГМИИ имени Пушкина (на фото ниже представлен образец штампа из Royal Collection Trust — организации, управляющей королевской коллекцией Великобритании, — и фотография тыльной стороны картины Пушкинского музея).

123

Джампетрино — ученик и последователь Леонардо. И нет ничего удивительного, что его работа долгое время, вплоть до XX века, приписывалась да Винчи — для леонардесков это довольно частая история.

На сайте Royal Collection Trust это произведение охарактеризовано следующим образом: Salvator Mundi by Giampietrino, a follower of Leonardo, in the Pushkin State Museum, Moscow, with a CR brand should be identified with either this record or Sale WS 263, no. 123 («Спаситель мира» Джампетрино, последователя Леонардо, в Пушкинском музее, Москва, с печатью CR должен быть соотнесен либо с этой, либо с другой записью — продажа WS 263, no. 123).

123


На цвет золота: в чем коммерческая тайна великого Пабло Пикассо Почему работы художника до сих пор продаются тысячами, а цены на них никогда не рухнут

Под WS 263, no. 123 подразумевается еще одна запись с распродажи: (And Leonardo Da Vinci) A Lord's figure, in half. То есть картина с возможным участием да Винчи, на которой Господь изображен наполовину. Теоретически еще один «Спаситель мира» мог быть этой работой. И за данный факт осторожные англичане ухватились, видимо, не желая дискредитировать собственную Национальную галерею и известных экспертов, участвовавших во всей этой операции. После аукциона на сайте Royal Collection Trust появилась фраза, размещенная под упоминанием произведения Джампетрино:

The Salvator Mundi sold as Leonardo at Christie's Post-War and Contemporary Sale 15th November 2017, lot 9B may also be identified with one of the records («Спаситель мира», проданный как Леонардо на аукционе послевоенного и современного искусства Christie's 15 ноября 2017 года, лот 9B, может быть также идентифицирован с одной из этих записей).

В формулировке, однако, ключевое слово — may (может), тогда как в отношении Джампетрино использован глагол should (должен). Таким образом, московский «Спаситель мира» точно относится к коллекции короля, и это подтверждает Royal Collection Trust, а аукционный «Спаситель мира» только может быть оттуда (а может, в коллекции была и какая-то другая вещь). Обратим внимание также на фразу sold as Leonardo, то есть не Леонардо, а проданный как Леонардо.

123

«Спаситель мира» Джампетрино из собрания ГМИИ имени Пушкина


Работы одного из крупнейших творцов эпохи Возрождения

Любопытная деталь: в 1651 году вторая королевская картина была продана за £80 — более чем вдвое дороже, чем первая. Разницу в цене можно было бы объяснить существенными отличиями по размеру (увы, в описи они не указаны). Но габариты московского и аукционного «Спасителей» очень близки. Следовательно, скорее всего, за £30 был продан Джампетрино, а за 80 — какая-то более крупная вещь, нам не известная. Допустимо и другое предположение: Джампетрино ушел за £80, а в £30 оценили куда более компактную вещь настоящего Леонардо — ту самую, которая стала прообразом всех вышеупомянутых «Спасителей». Здесь стоит напомнить, что в коллекции Карла I был, например, «Иоанн Креститель», ныне хранящийся в Лувре и, без сомнений, атрибутируемый Леонардо.

Но вернемся к «Спасителю», проданному в 2017-м. Все остальные пункты истории владения им вплоть до XVIII века Christie’s указывает с пометкой probably (возможно). И только информация про короля подается с уверенностью — эксперты аукционного дома связывают лот именно с картиной, проданной в 1651 году за £30. Хотя, как мы видим, даже Royal Collection Trust как минимум сомневается в принадлежности картины Карлу I. Но если бы слово probably стояло и в строке про короля, провенанс выглядел бы совсем неубедительно. Ведь probably в данном случае означает отсутствие каких-либо доказательств.

Компания Christie’s получила запрос «Известий», но не смогла предоставить комментарий в указанный срок.

Музею работа не нужна


Выставили Ван Гога: самоуничтоженная картина и жучки из прошлого

Главный научный сотрудник и хранитель итальянской живописи ГМИИ имени Пушкина Виктория Маркова уверена: если бы она заранее написала в Christie’s о том, что картина с королевским штампом находится в Москве, «Спасителя мира» могли снять с торгов.

— Я этого не сделала, потому что не знала, что они спекулируют на нашем штампе. Но, конечно, мое письмо в аукционном доме не оставили бы без внимания. Возможно, они не так заинтересованы в объективной информации, но им точно не нужны неприятности, — поделилась Виктория Маркова с «Известиями».

А о самом произведении, приписываемом Леонардо, хранитель ГМИИ знала задолго до аукциона. В ноябре 2010 года ее позвала к себе в кабинет директор Пушкинского музея Ирина Антонова, сообщила, что предлагают купить Леонардо, и предложила внимательно изучить две папки с документами на картину. Ознакомившись с ними, Виктория Маркова сказала, что эта картина не является работой Леонардо и музею не нужна.


Посыпал пеплом: китайский художник привез в Эрмитаж древние ритуалы Персональная экспозиция Чжана Хуаня пересказывает западные сюжеты на восточный лад

— Известно, что Леонардо написал одну картину этого иконографического типа. Но мы о ней ничего не знаем. И нет никаких доказательств, никаких аргументов в пользу того, что нам предлагали ту самую картину. Картина в такой плохой сохранности, что говорить о ней как о произведении искусства нельзя. От подлинной живописи там почти ничего не осталось. Только половина правой кисти Христа. Возможно, эта кисть — действительно работа мастерской Леонардо. Но если кто-то будет приписывать ее самому да Винчи — это спекуляция, — объяснила «Известиям» свое решение Виктория Маркова.

Позже, общаясь с хранителем итальянской живописи Эрмитажа Татьяной Кустодиевой, Маркова узнала, что им тоже предлагали купить работу. Но и Петербург не заинтересовался.

— Татьяна Кирилловна считала, что это работа мастерской Леонардо. Я даже в этом сомневаюсь. То есть я бы написала «Мастерская Леонардо да Винчи (?)». Татьяна Кирилловна, возможно, указала бы ее без вопросительного знака, — сообщила Маркова.

«Известия» направили запрос в Эрмитаж с просьбой уточнить обстоятельства тех событий. В ответ директор Михаил Пиотровский передал фрагмент из своей (в соавторстве с Джеральдин Норман) еще не вышедшей англоязычной книги об Эрмитаже. Приводим его целиком в русском переводе.

Здание ГМИИ им. Пушкина

«В Эрмитаж обратились в сентябре 2010 года. Майкл Франсес, лондонский дилер, специализирующийся на восточных тканях и выступающий в качестве агента консорциума (американских арт-дилеров, владевших картиной. — «Известия»), прибыл в Санкт-Петербург, и был организован официальный просмотр. У него была с собой очень точная фотография картины, которую он поставил на мольберт в кабинете директора. У него также были копии отчета о реставрации и массивный фолиант с информацией о бэкграунде картины и других сопутствующих вопросах. Специалисты из отдела живописи собрались в офисе, и Франсес рассказал историю картины. Он пригласил одного или нескольких человек приехать в Лондон, чтобы посмотреть саму картину.

Он, конечно, надеялся, что вызовет энтузиазм сотрудников музея, которые убедят какого-нибудь российского олигарха купить картину и передать ее Эрмитажу во владение или в аренду. Франсес был разочарован. Мнение сотрудников, которых собрал Пиотровский, состояло в том, что Эрмитажу картина не нужна. В музее уже имелся очень хороший и очень похожий Salvator Mundi Тициана».


Куратор выставки в Музее Жакмар-Андре Ана Дебенедетти — о неразрешенных загадках живописца, его целомудренной любви и аукционных рекордах

Добавим, что последняя фраза этого рассказа явно призвана «подсластить пилюлю». На самом деле, конечно, ни один музей никогда бы не отказался от картины Леонардо, сколько бы аналогичных произведений других художников у него ни было. А найти деньги в таком случае действительно было бы вполне реальной задачей. Богатый человек мог бы купить картину и передать ее на длительный срок музею. Для него эта сделка стала бы идеальной инвестицией, ведь выстави Эрмитаж или иной музей аналогичного уровня картину как работу Леонардо, ее цена сразу вырастет многократно.

Эрмитаж и ГМИИ были далеко не единственными музеями, которым предлагали купить работу. Владельцы торговали ею четыре года, в том числе и в США, где традиции меценатства особенно развиты. Покупателей среди художественных институций не нашлось.

— Эксперты и коллекционеры испытывали сомнения в авторстве работы и в ее истории. Откуда она появилась, как дошла до нас… К тому же она была в не очень хорошей сохранности, что заставило ее реставрировать. Всё это сильно усложняет процесс верификации, и в результате от «Спасителя мира» отказались практически повсеместно, — рассказал «Известиям» Антуан Виткин, режиссер фильма Savior for the Sale.


Самые интересные виртуальные туры и экскурсии в России и за рубежом

«Это огромная мировая афера», — резюмирует Виктория Маркова. В искренность экспертов, подтвердивших авторство Леонардо, она не верит. Судя по всему, такая позиция в музейном сообществе сейчас доминирует. Неудивительно, что новый владелец решил пока спрятать скандальное произведение, не привлекать к нему внимание. А сколько продлится эта пауза — можно только предполагать.

— Может быть, когда через некоторое время полемика утихнет и страсти улягутся, демонстрация картины станет возможной, но не сейчас, — рассуждает Антуан Виткин. — Лувр, напомню, уже отказался выставлять эту работу у себя. С другой стороны, мне кажется вполне вероятным, что картина всплывет в каком-нибудь из новых музеев в регионе Аравийского залива.

На сегодняшний день точное местоположение «Спасителя мира» неизвестно. Загадочная история загадочной картины завершается загадкой. Хотя, возможно, это еще не конец.

Есть ли файл или меню, которые позволят мне изменить настройки работы с окончаниями строк?

Есть 3 варианта:

оформить в стиле Windows, зафиксировать в стиле Unix

Git преобразует LF в CRLF при проверке текстовых файлов. При фиксации текстовых файлов CRLF будет преобразован в LF. Для кроссплатформенных проектов это рекомендуемый параметр в Windows (для "core.autocrlf" установлено значение "true")

Оформить заказ как есть, принять Unix-стиль

Git не будет выполнять никаких преобразований при проверке текстовых файлов. При фиксации текстовых файлов CRLF будет преобразован в LF. Для кроссплатформенных проектов это рекомендуемый параметр в Unix (для "core.autocrlf" установлено значение "input").

Оформить заказ как есть, зафиксировать как есть

Git не будет выполнять никаких преобразований при проверке или фиксации текстовых файлов. Выбор этой опции не рекомендуется для кроссплатформенных проектов ("core.autocrlf" имеет значение "false")

Нормальный способ контролировать это с git config

Для получения подробной информации прокрутите вниз в эта ссылка на Pro Git в раздел с именем "core.autocrlf"

Если вы хотите знать, в каком файле он сохранен, вы можете выполнить команду:

и глобальный конфигурационный файл git должен открыться в текстовом редакторе, и вы можете увидеть, откуда этот файл был загружен.

Формат окончания строки, используемый в ОС

  • Windows: CR (возврат каретки \r ) и LF (LineFeed \n )
  • OSX, Linux: LF (LineFeed \n )

Мы можем настроить git для автоматического исправления форматов окончания строки для каждой ОС двумя способами.

  1. Конфигурация Git Global
  2. Используйте .gitattributes файл

Глобальная конфигурация

Это исправит любое CRLF к LF при фиксации.

Это гарантирует, что при оформлении заказа в Windows все LF преобразуются в CRLF

Файл .gitattributes

Хорошей идеей будет сохранить файл .gitattributes , так как мы не хотим, чтобы все в нашей команде устанавливали свои конфигурации. Этот файл должен храниться в корневом каталоге репо, и, если он существует, git будет его уважать.

Это будет обрабатывать все файлы как текстовые файлы и автоматически конвертировать в строку ОС, заканчивающуюся при извлечении, и обратно в LF . Если хотел сказать явно, то используй

Первый предназначен для проверки, а второй - для фиксации.

Обрабатывайте все изображения .jpg как двоичные файлы. Так что конверсия не нужна

Для решения по настройке репозитория, которое можно распространять среди всех разработчиков, проверьте атрибут text в файле . Gitattributes . Таким образом, разработчикам не нужно вручную устанавливать свои собственные окончания строк в репозитории, а поскольку разные репозитории могут иметь разные стили окончания строк, глобальный core.autocrlf не самый лучший, по крайней мере, на мой взгляд.

Например, сброс этого атрибута по заданному пути [. - text] заставит git не трогать окончания строки при регистрации и выписке. На мой взгляд, это лучшее поведение, так как большинство современных текстовых редакторов могут обрабатывать оба типа окончаний строк. Кроме того, если вы, как разработчик, все еще хотите выполнять преобразование конца строки при регистрации, вы все равно можете установить путь для соответствия определенным файлам или установить атрибут eol (в .gitattributes) в своем хранилище.

Также ознакомьтесь с этой соответствующей статьей, в которой более подробно описан файл .gitattributes и атрибут text: Какова лучшая стратегия обработки CRLF (возврат каретки, перевод строки) с Git?

Если вы хотите преобразовать обратно форматы файлов, которые были изменены в формат UNIX из формата ПК.

(1) Вам необходимо переустановить GIT с черепахой и в разделе "Концовка строк" ​​убедиться, что вы выбрали опцию "Получить как есть" - "Проверить как есть".

Читайте также: