Чтение изменений

Диффы и предпросмотр

Как читать дифф

Переключатель Что делает
Единый ↔ раздельный Бок о бок — когда хочется сравнивать, друг под другом — когда хочется читать
По словам Подсвечивает только изменившиеся токены внутри отредактированной строки — красным в старой, зелёным в новой
Игнорировать пробелы Прячет перестановку отступов, чтобы всплыло настоящее изменение
Перенос (только в двух колонках) Переносит длинные строки внутри колонки вместо прокрутки
Связано (две колонки, без переноса) Прокручивает обе половины вместе, по вертикали и по горизонтали — выключено, каждая колонка сама по себе
⌘F Поиск внутри диффа, с переходом к следующему и предыдущему

Перенос по умолчанию выключен: одна строка занимает один ряд, поэтому обе стороны остаются сопоставимыми строка к строке, а каждая половина прокручивается по горизонтали своей полосой. Включайте его, когда длинную строку хочется прочитать, а не догонять, — расплата в том, что строка, свёрнутая в три ряда, больше не стоит напротив своей пары. Каждый переключатель запоминает состояние между файлами и сеансами.

Без переноса обе половины по умолчанию прокручиваются связанно — по вертикали, что держит строки друг напротив друга, и по горизонтали, поэтому 90-я колонка слева стоит над 90-й справа. Развяжите их, когда стороны разошлись — блок с отступом против блока без него, переименование, сдвинувшее каждую строку, — или когда хочется сравнить два далёких участка одного файла, и оставьте каждую половину там, где её содержимое.

Раздельный дифф с подсветкой по словам

Над каждым диффом стоит семантическая сводка — что изменилось, символ за символом, а не строка за строкой.

Диффы изображений

Изменившиеся картинки получают настоящее сравнение: бок о бок или ползунок, которым перетаскиваешь границу между «до» и «после».

Дифф изображения

Полоса изменений и миникарта

Вид «Файл» для файла рабочего дерева — проиндексированного или нет, отслеживаемого или совершенно нового — несёт цветную полосу рядом с каждой строкой, изменённой с момента HEAD (или индекса — для проиндексированных файлов): зелёный для вставки, синий для изменения, маленький красный клин там, где строки удалены без замены. Нажмите на полосу, чтобы увидеть это изменение, не покидая файл — во всплывающем окне показаны удалённые и добавленные строки, с кнопками «вперёд»/«назад» для прохода по всем изменениям файла.

Полоса изменений с открытым окном хунка, миникарта справа

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

Ни одна из них не читает историю: переключитесь на Diff, Blame или более старый коммит — и полоса исчезнет, ведь эти виды уже показывают каждое изменение напрямую.

Предпросмотр чего угодно

Режим Предпросмотр отрисовывает файл, а не показывает его исходник: Markdown, Word (.docx), Excel (.xlsx), PDF, видео, аудио, картинки — и код с подсветкой синтаксиса для всего остального.

Предпросмотр Markdown

Property list от Apple

Info.plist и *.entitlements — это XML, а XML никто читать не собирался. Предпросмотр вместо этого показывает схему «ключ — значение», ту самую, что показывает собственный редактор plist в Xcode: вложенность сохранена, тип каждого значения рядом.

Info.plist как схема «ключ — значение»

Два ограничения. Двоичный plist (bplist00) распознаётся и называется, но не декодируется — прогоните его через plutil -convert xml1, если хотите увидеть здесь, хотя двоичный plist в репозитории обычно артефакт сборки, которому там не место. А значения <data> показываются числом байт, а не base64: блоб вам ничего не скажет, а профиль подготовки, отрисованный в панели, которую вы, возможно, демонстрируете, скажет всем остальным слишком много.

Проекты Xcode

project.pbxproj — это один плоский словарь объектов, ссылающихся друг на друга по идентификаторам, поэтому чтение по порядку почти ничего не говорит о проекте. Предпросмотр проходит по этим ссылкам и восстанавливает три вещи, за которыми вы пришли: цели с их фазами сборки, дерево групп так, как его рисует навигатор Xcode, и настройки сборки по конфигурациям.

project.pbxproj как цели, дерево файлов и настройки

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

Очень большие файлы

Предпросмотр и просмотр файла загружают файл в память целиком, поэтому оба отказываются открывать файлы сверх лимита размера (32 МБ для предпросмотра, 16 МБ для текста) и вместо этого показывают, насколько велик файл. Всё равно загрузить снимает лимит для этого файла — ничто не остаётся недоступным, большие загрузки просто требуют явного согласия. Файлы и диффы длиннее нескольких тысяч строк по-прежнему рендерятся целиком, но строки за пределами видимой области больше не компонуются и не отрисовываются — гигантский дифф lockfile-а перестаёт стоить памяти целого ноутбука.

Файл сверх лимита размера с кнопкой «Всё равно загрузить»

Вкладка «Файлы»

Вкладка Файлы в левой панели ходит по самому рабочему дереву, а на папках висят бейджи статуса (добавлено / изменено / удалено), суммирующие то, что внутри.

Вкладка файлов с предпросмотром

Бейджи папок, суммирующие изменения внутри каждой

См. также: Семантический дифф · Индексирование

Улучшить этот перевод на GitHub