Когда другой разработчик пытается извлечь его, ничего не происходит. (Анонимная ветка не будет получена !?)
Анонимные ветви проблематичны. Части Git считают, что это ветви, а части нет. Если они существуют, то каждая фиксация является ее собственной анонимной ветвью. Для большинства целей, вероятно, лучше всего подумать о выборе фиксации с или без выбора некоторых или всех его предков. Выбор фиксации bacacab
без родословная получает от вас одну фиксацию, и ее выбор с ancestry заставляет ее действовать как анонимная ветка.
В любом случае, то, что git fetch
всегда копирует без изменений, потому что оно должно состоять из самих объектов-коммитов и того, что относится к ним: любые деревья или капли требуются, и требуются любые ранее требуемые коммиты. Для объектов с аннотированными тегами Git копирует сам объект тега без изменений и добавляет целевой объект тега к набору требуемых объектов (для копирования, если он еще не присутствует). Как это находит те идентификаторы объектов по именам - любые имена ссылок, а не только названия ветвей или тегов, представленные другим Git, тот, который Git извлекает из. Таким образом, это означает, что должно быть. Но это имя в другом Git, в другом репозитории; имя, если оно есть, использовать в ваш репозиторий - это что-то под вашим контролем.
Как выясняется, существует некоторая ошибка, когда Git извлекает только имя тега и не дает инструкции скопировать имя тега явно, он вообще ничего не пишет (кроме файла FETCH_HEAD
) в некоторых случаях. См. my answer - Why is git fetch not fetching any tags? Короче говоря, если вы git fetch --tags
, вы получите их - другое имя тега Git's, скопированное в тег с тем же именем в вашем собственном репозитории, и затем вы можете использовать это имя тега для поиска фиксации (и его предков).
В этом отношении, один фиксации может быть кончик фиксации бесконечного числа анонимных ветвей. Кто скажет, если отсутствие имени совпадает с именем второго имени? Ясно, что анонимная ветка, заканчивающаяся на фиксации dadf00d
, отличается от анонимной ветки, заканчивающейся на bl00de1f
, поэтому no-name определенно не соответствует no-name. Так почему же или нет, нет-имя для ac0ffee
соответствует нет-имени для ac0ffee
? (Это риторический/философский вопрос, призванный задуматься о характере суждений и названий ветвей в Git, а не о конкретном ответе, хотя у меня есть свой собственный конкретный ответ. :-))
Это модифицировано для мелких клонов. Здесь коммиты скопируются до некоторого значения «глубины», а затем Git вставляет мелкий графт, искусственно притворяясь, что у фиксации нет родителей (путем записи идентификатора фиксации до .git/shallow
). Но фиксация фактически копируется нетронутой; это просто графовая прогулка, которая усекается.
Похоже, вы хотите [создать ветку] (http://stackoverflow.com/a/10940996/391161) в текущем теге (с тем же именем, что и тег, возможно) и нажать эту ветку? – merlin2011
Не имеет смысла нажимать ветку, содержащую тег, потому что несколько ветвей могут содержать фиксацию, упомянутую тегом в их истории. – merlin2011
Ну, все должно быть хорошо. Пока одна ветка, содержащая тег, уже была нажата, анонимная ветка не будет создана. Вопрос будет уточнен: если ни одна ветвь, содержащая тег, мы хотим, чтобы по крайней мере одна ветвь (обычно текущая ветвь), содержащая этот тег, также была нажата. Или лучше: если такой случай найден, и текущая ветвь не содержит этот тег, сообщает об ошибке. –