Git не имеет той же концепции номеров ревизий, что и subversion. Вместо этого каждый данный снимок, сделанный с фиксацией, помечается контрольной суммой SHA1. Зачем? Существует несколько проблем с запуском revno в распределенной системе контроля версий:
Во-первых, поскольку разработка вообще не является линейной, привязка числа является довольно сложной задачей, чтобы решить ее таким образом, чтобы удовлетворить ваши потребности как программиста. Попытка исправить это путем добавления номера может быстро стать проблематичной, если номер работает не так, как вы ожидаете.
Во-вторых, номера ревизий могут генерироваться на разных машинах. Это значительно усложняет синхронизацию чисел, особенно потому, что связь односторонняя; у вас может даже не быть доступа ко всем машинам, на которых есть хранилище.
В-третьих, в git, в некоторой степени впервые использовавшейся ныне несуществующей системой OpenCM, идентификатор коммита (что такое коммит) эквивалентен имени (идентификатор SHA) , Эта концепция naming = identity очень сильна. Когда вы сидите с именем коммита в руке, он также идентифицирует коммит не поддающимся обработке способом. Это, в свою очередь, позволяет проверять все ваши коммиты обратно на первый начальный на наличие повреждений с помощью команды git fsck
.
Теперь, поскольку у нас есть DAG (направленный ациклический граф) ревизий, и они составляют текущее дерево, нам нужны некоторые инструменты для решения вашей проблемы: как мы различаем разные версии. Во-первых, вы можете опустить часть хэша, если данный префикс, скажем, 1516bd уникально идентифицирует ваш коммит. Но это тоже довольно надумано. Вместо этого, хитрость заключается в использовании тегов и / или ветвей. Тег или ветка похожи на «желтую заметку», которую вы прикрепляете к данному SHA1-идентификатору коммита. По сути, теги должны быть неподвижными, тогда как ветвь будет перемещаться, когда в ее HEAD будут сделаны новые коммиты. Существуют способы ссылки на коммит вокруг тега или ветви, см. Справочную страницу git-rev-parse.
Обычно, если вам нужно поработать над определенным фрагментом кода, этот фрагмент претерпевает изменения и должен как таковой быть ветвью с говорящим названием темы. Создание большого количества веток (20-30 на каждого программиста не является неслыханным, с некоторыми 4-5, опубликованными для других, чтобы работать над ними) - хитрость для эффективного git. Каждая часть работы должна начинаться как отдельная ветвь, а затем объединяться во время тестирования. Неопубликованные ветви могут быть полностью переписаны, и эта часть разрушающей истории является силой мерзавца.
Когда изменение принято в мастер , оно несколько застывает и становится археологическим. В этот момент вы можете пометить его, но чаще всего ссылка на конкретный коммит делается в трекере ошибок или трекере ошибок через сумму sha1. Тэги, как правило, зарезервированы для выпусков версий и точек ветвления для ветвей обслуживания (для старых версий).