> но ЗАЧЕМ? случаи «б» и «в» элеметнарно сводятся к «а».Как зачем? Есть три сущности, однозначно идентифицирующие комит. Надо достать ревизию по этой сущности. В разных случаях удобно использовать разные:
- имя ветки для разработческих веток (там почти всегда нужен HEAD)
- по tag-у для релизов (учитываем, что релизных веток несколько)
- по tag-у для сборок с разными опциями - debug, trace, fix ... (эти тэги могут гулять по разным веткам)
- по идентификатору, если что-то экстренное и тэг ставить жалко
Все решаемо, если одновременно знаем имя ветки и тэг/идентификатор в рамках нее. Только имя ветки тут - лишняя сущность, которая несет кучу гемороя. Какой-нибудь тэг fix_abc переехал в из ветки fix1 в fix2 и все - сборка поломалась.
>> Должны работать все три случая единым способом (делается автоматически на сборочной машине).
> сделай скрипт-обёртку. лично я, например — категорически против того, чтобы разные
> вещи делались одним и тем же способом.
То есть Вы против того, что checkout работает одинаково с ветками и тэгами при переключении? Только сейчас оно работает от случая к случаю, а должно работать всегда.
В реальности мне нужна отдельная команда, вытаскивающая трэкинг-брэнч в логике
"checkout -b". branch - создать ветку из текущей локальной, какой-нибудь tbranch - создать ветку из удаленной. Тогда можно добиться, чтобы "git tbranch origin something" работал одинаково с ветками, тэгами и комитами.
>> git очень хорош архитектурно, но система команд крива и не продумана.
> а как по мне — всё достаточно логично. надо просто думать «по
> гитовски», и логика находится.
Может это со мной что-то не так, но я хочу ездить на автомобиле без изучения системы впрыска. У системы есть интерфейс, его должно быть достаточно. Если его не достаточно - значит он плохой, ч.т.д.