10.5. The Refspec

Это типа конспект, который я веду для себя, чтобы получше разобраться и запомнить. Вероятно, вам лучше сразу читать оригинал: 10.5 The Refspec.

Эээксперименты

Эксперимент 1

Создаём репозиторий и настраиваем копии:

  1. Делаем две локальные копии одного репозитория
  2. В одном (local) делаем маппинг веточек с плюсиком: fetch = +refs/heads/::refs/remotes/origin/
  3. В другом (local2) — без плюсика: fetch = refs/heads/::refs/remotes/origin/
  4. Накоммитим чего-нибудь в мастер и синхронизируем копии

Делаем не fast-forward пуш из local (с флагом --force)

  • Смотрим, что в local:

  • Смотрим, что в remote:

Фетч в local2:

  • Как сфетчилось:

  • Смотрим, что получилось:

    То есть видим, что не сфетчилось.

  • Форсим фетч:

Делаем не fast-forward пуш из local2 (с флагом --force)

  • Смотрим, что в local2:

  • Смотрим, что в remote:

Фетч в local:

  • Как сфетчилось:

  • Смотрим, что получилось:

    То есть сфетчилось даже без флага --force

Эксперимент 2

Поэкспериментирует со спеками пуша.

Зададим такую спецификацию в local:

Сделаем пуш из local2

  • Смотрим, что в local2:

  • Смотрим, что в remote:

Пуллимся в local.

Теперь делаем новый коммит в master local и пушимся.

Смотрите! Что-то запушилось в ololo, но в локальном репозитории нет этой ветки.

Проверяем, что в remote:

Ветка появилась, но у неё весьма странное название. То есть конфигурация «push» указывает имя ветки, в точности то, что будет в удалённом репозитории.

Исправляемся. Удалим из remote эту странную ветку и настроим «push» по другому:

Пушимся:

Что произошло: мы запушили в новую ветку ololo на remote, при этом origin/master не сдвинулся.

Смотим, что эта ветка появилась на remote и с мастером ничего не произошло:

Эээксперимент 3

Удалим ветку с ориджина старым синтаксисом.

Зайдём на local и сделаем оттуда push:

Посмотрим, что на remote:

Ветка, которую мы там создали в предыдущем эксперименте удалилась.

Попробуем аналогичным образом грохнуть локальную ветку:

Ничего не вышло, ветка на месте:

Собственно, конспект

The Refspec

Так мы задаём, как во время фетча автоматически маппить удалённые ветки на локальные.

Можно задавать несколько правил одновременно:

Так можно гибко использовать пространства имён, чтобы ограничивать фетчи:

Начальный + — опциональный флаг, который говорит, что ссылки нужно обновлять даже если они не фастфорвард. Тут было бы неплохо провести эээксперимент 1.

Можно настраивать разовный маппинг в момент фетча, как с одной спецификацией, так и с несколькими:

Pushing Refspecs

Аналогично можно спецификацию для пуша или использовать разово:

или

Тут было бы неплохо провести эээксперимент 2

Deleting References

Если в мапинге пуша скомандовать пуш из «ничего», то целевая ветка удалится:

Эквиалентная команда: