Вопрос или проблема
Совсем недавно начал работать с Git. Недавно обновил его на своем Mac. Я обновился, используя эти 4 команды:
$ git clone git://git.kernel.org/pub/scm/git/git.git
$ cd git
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install
$ git --version
git version 1.7.3.2.164.g6f10c
моя старая версия Git была просто: 1.7.1.x
У меня предварительная версия сборки? Если да, то как я могу использовать git, чтобы взять последнюю стабильную сборку? git branch -a
показывает мне:
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/html
remotes/origin/maint
remotes/origin/man
remotes/origin/master
remotes/origin/next
remotes/origin/pu
remotes/origin/todo
Мне кажется, что это разбивается следующим образом:
Версия git, которую вы используете, — это та, что имеет 164 коммита с момента версии 1.7.3.2. Точный номер ревизии git начинается с префикса g6f10c
(эти 6 цифр должно быть достаточно, чтобы уникально идентифицировать коммит, если вам нужно сослаться на эту ревизию в частности).
Вы можете увидеть выпущенные версии, выполнив git tag
, и вы можете получить версию 1.7.3.2 точно, выполнив git checkout v1.7.3.2
.
Совершенно разумно считать, что верхушка master в git.git стабильна.
Из Documentation/howto/maintain-git.txt:
Верхушка ‘master’ предназначена быть более стабильной, чем любые отмеченные релизы, и пользователям рекомендуют следовать за ней.
Прежде чем новая функция будет объединена в master, она обсуждается в списке рассылки и «созревает» (часто в течение нескольких недель) в ветках pu и next, которые разработчики регулярно тестируют и используют.
Нумерация версий Git работает следующим образом:
o----- основной выпуск: 1.7
/ o---- выпуск с новыми функциями: 1.7.3
/ / o--- maintenance выпуск: 1.7.3.2
/ / /
1.7.3.2
Основные выпуски часто содержат несовместимые изменения. Выпуски с новыми функциями вводят новые функции. Maintenance выпуски содержат исправления ошибок.
master это почти буквально слияние последнего maintenance выпуска и текущих накопленных функций для следующего выпуска с новыми функциями.
Вывод git --version
основан на выводе git describe на коммите, который использовался для сборки бинарного файла (см. GIT-VERSION-GEN).
Вывод из git describe добавляет дополнительную информацию, чтобы лучше определить конкретную версию, когда вы основываетесь на коммите, который явно не отмечен.
o------------- самый последний достижимый тег: 1.7.3.2
/ o--- 'g' + сокращенное имя объекта собранного коммита: 6f10c
/ /
1.7.3.2.164.g6f10c
\
o---------- количество коммитов в собранном коммите "сверху" тега: 164
По состоянию на сегодня, 1.7.3.2 — это самая последняя стабильная версия, доступная через http://git-scm.com/ Что заставляет вас сомневаться, что у вас самая последняя версия?
Ответ или решение
Версия Git — это один из ключевых компонентов этого программного обеспечения, который существенно влияет на его работу и развитие. Для нового пользователя Git очень важно понимать структуру и назначение версии, чтобы эффективно использовать версию, которая соответствует его потребностям, и для лучшего понимания всех возможностей и улучшений.
Теория
Git использует одну из наиболее распространенных схем версионирования, состоящую из трех основных компонентов: основной выпуск (major), функциональный выпуск (feature), и обслуживающий выпуск (maintenance). Эти обозначения подсказывают пользователю, чего можно ожидать от каждой новой версии.
-
Основной выпуск — Например, 1.0, 2.0 и т.д. Эти версии могут содержать значительные изменения, включая обратимые и необратимые, которые могут потребовать от пользователя адаптации существующих процессов работы.
-
Функциональный выпуск — Например, 1.1, 1.2 и т.д. Такие версии обычно включают новые функциональные возможности, но сохраняют обратную совместимость с предыдущими версиями основных выпусков.
-
Обслуживающий выпуск — Например, 1.1.1, 1.1.2 и т.д. Эти версии, как правило, содержат исправления ошибок и другие незначительные улучшения, которые направлены на повышение стабильности и надежности ПО.
Пример
В вашем случае, версия Git 1.7.3.2.164.g6f10c имеет дополнительный контекст благодаря четырем элементам:
-
1.7.3.2: Это обозначение обслуживания, означающее, что это четвертое исправление для версии 1.7.3.
-
164: Указывает количество коммитов, сделанных после последней тегированной версии (1.7.3.2), чтобы подчеркнуть серьёзное развитие, которое произошло до момента, когда была созданы обозреваемые сборки.
-
g — Префикс, который указывает на то, что следующее является идентификатором коммита в Git.
-
6f10c: Это первые несколько символов SHA-1 хеша коммита, на котором базируется данная сборка. Он позволяет однозначно определить конкретный коммит, на котором был построен ваш билд.
Применение
Если вы хотите избежать использования того, что можно считать предварительным релизом, вы можете переключиться к последнему стабильному выпуску, который возможно не имеет дополнительных экспериментальных изменений. Это можно сделать, используя команды Git для работы с тегами и ветками:
-
Чтобы просмотреть все доступные теги, которые связаны со стабильными выпусками, выполните команду:
git tag
Это позволит вам увидеть все официальные релизы, доступные в вашем репозитории.
-
Затем вы можете переключиться на точный стабильный выпуск, например, выполнив:
git checkout v1.7.3.2
Таким образом, ваш рабочий каталог проекта будет свернут к состоянию этого конкретного релиза.
Заключение
Ваш вопрос о том, является ли версия предварительным выпуском, имеет под собой логику. Однако важно понимать, что современное программное обеспечение развивается в гибкой и динамичной среде, где выделение конкретных стабильных версий становится все менее значимым. Многие команды разработки предпочитают использовать последнюю версию из ветки master, поскольку она регулярно обновляется и содержит проверенные изменения. Тем не менее, если вы предпочитаете использовать только официально выпущенные версии для более высокой стабильности, использование описанных выше команд станет для вас удобным инструментом управления состоянием вашего программного обеспечения.