Создание ветки практически ничего не стоит для создания внутри одного репозитория (технически говоря, это зависит от того, что вы положили в ветку, но я уверен, что было понятно с самого начала).
При клонированиирепо, вы могли бы удвоить требования к хранилищу (как для пакетов, так и для рабочего дерева).Однако это может привести вас к мысли, что клонирование репозиториев - вещь неоптимальная.Позвольте мне рассказать вам, почему это не всегда так /
Репо - это на самом деле просто коллекция ссылок на филиалы.Ветвь на самом деле (как при глубоком копировании) занимает столько же, сколько репо, за исключением блобов в коммитах, уникальных для конкретной ветки.(Обычно нет большой разницы).
Локально, вы можете клонировать репо практически без дополнительных затрат, потому что его можно жестко связать (то есть внутри одной файловой системы).Также можно избежать затрат, связанных с использованием другого рабочего дерева, путем клонирования в голое хранилище (например, с помощью git clone --mirror
).
В РАМКАХ ПРОЕКТА
В моемПо мнению репо, репо соответствует «игроку» в распределенном рабочем процессе.Игроки могут быть «физическими лицами» или «ролями».У меня есть
- центральное репо (с возможностью подключения к сети, так что я могу работать из любого места, толкая и вытягивая)
- рабочее репо (по одному на рабочую станцию; с эфемерными и временными ветвями, которые связаны сProofOfConcept-ing, объединение, микрокоммитирование и т. Д.)
- резервное хранилище
- [возможно, клон github для pull-запросов, если восходящие разработчики находятся на github]
На практике только 3-4 типа ветвей распределяются между всеми репо (master, maint, testing, unstable).
ВНЕ ПРОЕКТА
Конечно, у проекта будет свое собственное репо (большую часть времени).Я начинаю склоняться к использованию субмодулей, потому что они кажутся более гибкими, чем разнородные ветви (т.е. разные проекты в отдельных ветках одного и того же репо)
Один большой плюс наличия одного репо заключается в том, чтобудет очень легко переключать связанное с ним рабочее дерево из одной ветви в другую.Чтобы быть справедливым, эту разницу можно обрабатывать в двух направлениях:
- вы можете переключить ваше рабочее дерево на ветку из другого хранилища, добавив его в качестве удаленного
- , вы можете иметьотдельная (даже пустая) работа репо с «нелокальным» рабочим деревом путем переопределения переменных среды GIT_WORKTREE
Видите ли, когда вы смотрите на это таким образом, репо начинает представлять собой наборветви с более или менее условной ассоциацией с одним рабочим деревом.По соглашениям возникают реальные различия: вы обычно используете репо для управления наборами веток и различным рабочим деревом.