Синхронизация и много репозиториев

Репозитории

Центр управления отвечает на вопрос «какой из моих открытых репозиториев меня сейчас требует?». Он знает только вкладки активного рабочего пространства. Репозитории отвечают на другое: где этот репозиторий, и открыт ли он вообще где-нибудь? Страница покрывает всё, что Gitcito когда-либо видел. Каждое пространство, каждую вкладку, плюс то, что находится при сканировании папок, на которые вы его наводите.

Страница «Репозитории»: цветные секции открытых, избранных, недавних и
рабочих пространств, в каждой строке имя, владелец, ветка и состояние
работы

Секции

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

Секция Что в ней
Открытые репозитории Каждая вкладка активного рабочего пространства прямо сейчас
Избранное Репозитории со звёздочкой, во всех пространствах
Недавние Всё, что вы открывали, новее сверху. Без потолка, в отличие от списка на 8 записей в лаунчере
Одна на сохранённое пространство Вкладки этого пространства, чтобы перейти в другое, не переключаясь сначала
Все репозитории Каждый репозиторий, который знает реестр, открытый или нет

Панель над списком одна полоса: Свернуть всё и Развернуть всё, затем поле поиска на оставшуюся ширину, затем переключатель сводки WIP.

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

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

Цвета секций

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

Чтобы сменить один, используйте ⋮ на его заголовке: Сменить цвет… открывает тот же выбор цвета, что у групповых вкладок и папок, десять готовых образцов плюс свободное hex-значение. Сбросить цвет появляется, когда вы переопределили секцию, и возвращает назначенный по умолчанию.

Три вещи, которые стоит знать:

  • Назначение стабильное, не случайное. Одни и те же секции получают те же цвета при каждом запуске, а добавление пространства никогда не перекрашивает те, что выше. Сохраняются только цвета, которые вы меняете.
  • Цвет локален для этой страницы. Покрасить здесь секцию пространства ничего не говорит об этом пространстве в остальном Gitcito. Цвет его вкладки это отдельная настройка.
  • Цвет разбавляется до низкой доли поверхности, а не кладётся полной силой, чтобы насыщенный выбор оставался читаемым фоном и в светлой, и в тёмной теме. Очень бледный цвет поэтому выглядит почти нейтрально.

При больше чем десяти секциях палитра повторяется, так что два заголовка могут делить оттенок.

Что делает репозиторий известным

Строка появляется здесь, когда Gitcito его когда-то открыл, или нашёл под папкой для сканирования. Ничто не индексируется только потому, что лежит на диске в месте, о котором вы Gitcito никогда не говорили.

Открытие этой страницы также индексирует то, что сейчас открыто во вкладке, так восстановленные при старте репозитории получают строку без повторного открытия. Покрываются только открытые вкладки, и это случается при первом визите каждой сессии, не один раз навсегда. Репозиторий, которому вы дали Forget, остаётся забытым, пока вы его снова не откроете.

Папки для сканирования настраиваются в Параметрах:

  • Глубина это, сколько уровней каталогов скан спускается ниже корня (по умолчанию 3, потолок 10).
  • Скан останавливается на репозитории. Вендорный checkout или сабмодуль внутри репозитория не индексируется как отдельная строка.
  • Он никогда не заходит в каталоги, начинающиеся с точки, и пропускает node_modules и похожие папки зависимостей.
  • Он читает только имена папок: найти каталог .git это то, что делает что-то репозиторием здесь. Имя, владелец и ветка берутся из файлов внутри .git (HEAD, конфиг), никогда запуском git.

Строки

Строки разложены по колонкам: звезда, имя (учитывает псевдоним, если вы переименовали), владелец (из URL remote origin), чип ветки, сводка WIP и действия. Колонки общие для всей страницы, не подгоняются под секцию, так что имя в последней секции стоит под именем в первой, и список читается как таблица, не как стопка.

Действия в конце видны в покое, не проявляются при наведении: открыть во вкладке и ⋮, которое открывает то же контекстное меню репозитория, что и правый клик. Это меню, которым пользуются везде в Gitcito, расширенное двумя пунктами именно этой страницы:

Действие Что делает
Звезда / снять звезду Добавляет репозиторий в Избранное или убирает оттуда
Locate… Заново указывает перемещённую или переименованную папку. Псевдоним, профиль и звезда остаются. Если у назначения уже были свои настройки, побеждает назначение
Forget Убирает запись из этого списка. Никогда не трогает папку на диске

Репозиторий, чья папка больше не существует, показывается как нет на месте, с Locate… и Forget в строке вместо обычных действий.

Звезда это переключатель избранного, не чекбокс массового выбора. Пакетная работа здесь идёт по секции, не по выделению. См. ниже.

Превратить дерево папок в рабочие пространства

Ваша папка с кодом уже кодирует нужную группировку. Если в ~/Code лежат client-a, client-b и personal, это контексты, между которыми вы переключаетесь, а рабочее пространство это ровно то же, со своей полосой вкладок.

Добавить папку для сканирования… предлагает их собрать. После того как скан проиндексировал найденное, диалог перечисляет папки прямо внутри той, которую вы выбрали, с числом репозиториев в каждой. Отметьте нужные. Каждая становится пространством с одной вкладкой на репозиторий.

Строка Значение
Имя папки и число Отмечена по умолчанию. Становится пространством
"{n} новых, вливается в …" Пространство для этой папки уже есть. Добавляются только новые репозитории
"Уже в рабочем пространстве" Делать нечего, посерено, а не спрятано
Имя самого корня Репозитории, лежащие россыпью в выбранной папке, не в подпапке. По умолчанию не отмечена

Репозиторий кладётся под первую папку под корнем, как бы глубоко он ни сидел: ~/Code/client-a/nested/app идёт в client-a. Папки без репозиториев не предлагаются.

Ничего не создаётся, пока вы не подтвердите, а отмена оставляет индексацию скана на месте. Репозитории известны в любом случае, и это то, что кнопка делала и раньше.

Сканировать снова позже

Безопасно повторять. Второй скан добавляет и никогда не удаляет:

  • Новые репозитории дописываются в подходящее пространство.
  • Те, что вы переместили, переименовали или убрали вручную, остаются как вы их оставили.
  • Пространство, которое вы переименовали, всё равно узнаётся. Gitcito помнит папку, из которой оно вышло, поэтому сливает, а не плодит дубликат.
  • Репозиторий, удалённый с диска, держит вкладку и показывается как отсутствующий.

Сгенерированные пространства обычные. Переименовывайте, переставляйте, перекрашивайте или удаляйте их как любые другие. Ничего в них не остаётся особенным.

Закрыть всё, что открыто

Заголовок Открытые репозитории несёт кнопку закрытия. Закрыть репозиторий, когда открыт один, Закрыть все вкладки, когда несколько. Она выключена, когда ничего не открыто.

Она закрывает вкладки, которые держат репозитории, и не трогает вкладки страниц, чтобы страница «Репозитории», на которой вы стоите, не закрыла сама себя. На диске ничего не трогается, ничего не коммитится, не стешится и не выбрасывается. Вкладка это только вид.

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

Fetch и pull целой секции

Каждый заголовок секции несёт кнопку fetch и раздельную кнопку pull. Они действуют на каждый репозиторий в этой секции, пропуская те, чья папка нет на месте. Репозитории не обязаны быть открытыми. Секция репозиториев, которые вы в этой сессии не открывали, работает так же.

Оба идут последовательно, не параллельно, чтобы секция из сорока репозиториев не поднимала сорок процессов git разом. Строка состояния показывает, над каким репозиторием идёт работа и как далеко прошёл прогон, и весь пакет заканчивается одним тостом, не одним на репозиторий. Если часть падает, тост говорит, сколько удалось и сколько нет. Прогон не останавливается на первой ошибке.

Стрелка рядом с pull выбирает, что значит pull:

Режим Что делает
Pull (fast-forward, если можно) По умолчанию Git. Fast-forward, когда может, merge, когда не может
Pull (только fast-forward) Отказывается вместо создания merge-коммита
Pull (rebase) Переигрывает ваши локальные коммиты поверх upstream

Этот выбор это одна глобальная настройка, не на секцию: он описывает, как вы делаете pull, и выставление его со стрелки одной секции меняет его везде. Каждый мультирепозиторный pull его соблюдает. Кнопки секций здесь, fetch/pull на групповой вкладке и массовый pull центра управления. Pull одного репозитория с панели не затронут, потому что то меню и так спрашивает, какой вид pull вам нужен.

Панель действий

Открыть папку…, Клонировать… и Добавить папку для сканирования…. Три способа занести репозиторий в реестр Gitcito, с той же страницы, на которой вы ищете уже известный.

Сводка WIP

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

Он необязателен нарочно: сводка стоит примерно пять процессов git на репозиторий, пачками по восемь, чтобы большой реестр не стопорил интерфейс. Включить это сознательное «проверь всё, что я сейчас вижу», не постоянная цена.

Ограничения

  • Ничто на этой странице не обновляется по таймеру. Откройте страницу снова или выключите и включите сводку WIP, чтобы увидеть текущее состояние.
  • Сводка WIP покрывает только развёрнутые секции. Свёрнутая секция не показывает статус вообще, флажок стоит или нет.
  • Репозиторий известен только когда вы его открыли или просканировали папку, которая его содержит. Отсюда файловую систему не обыскать.
  • Сборку пространств нельзя отменить одним шагом. Отмена диалога ничего не создаёт, но план, который вы подтвердили и потом пожалели, снимается ручным удалением пространств.
  • Только один уровень вглубь. Папки ниже первого уровня сплющиваются в полосу вкладок пространства. client-a/nested/app становится вкладкой в client-a, не папкой внутри.
  • «Сканировать сейчас» в Параметрах этого не предлагает. Оно сканирует все настроенные корни разом, где диалог на папку не имеет смысла, и только индексирует.
  • Закрыть все открывает вкладки по одной, до десяти. Закрыть больше десяти репозиториев сразу значит, что самые старые нельзя вернуть со стека, хотя все они ещё в Недавних.
  • Pull не фильтруется по тем, кто отстаёт. Он делает pull каждого репозитория в секции, потому что узнать, кто отстаёт, значило бы сначала сделать fetch. Pull актуального репозитория это no-op, это стоит времени, не безопасности.
  • Fetch или pull секции нельзя отменить со стека отмены. Fetch ничего не меняет в том, что у вас уже было. Pull, который делает merge или rebase, откатывается по репозиторию из истории этого репозитория, не отсюда.
  • Цвета секций косметические. Они нигде не фильтруют, не сортируют, не группируют и не синхронизируют, а цвет на секции пространства это не цвет этого пространства.
  • Forget убирает запись из списка, никогда с диска. Если папка ещё там, скан того же корня (или повторное открытие) возвращает её сразу.

См. также: Центр управления · Рабочие пространства, вкладки и группы

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