Не удается удалить тег с именем «master» на GitHub - PullRequest
0 голосов
/ 08 октября 2018

Редактировать: Не связано с GitHub.Проблема была в ошибке скрипта синхронизации (см. Комментарии).


Я пытался решить эту проблему уже пару месяцев, и я пришел к выводу, что она напрямую связана с GitHub.

Я являюсь участником проекта Stendhal , и наш исходный код размещен на GitHub & SourceForge .

Iначали появляться предупреждения или сообщения об ошибках о неоднозначных ссылках на «master».После некоторых исследований я обнаружил, что кто-то создал тег с именем "master" в репозитории Git.Репозитории GH & SF синхронизируются автоматически.Я больше не мог выдвигать свои коммиты, используя git push origin master.Мне пришлось указать ссылку на основную ветку: git push origin refs/heads/master

Мало того, что наличие тега вызывает проблемы с fetch / pull / push, это также приводит к тому, что загрузки тарболла с сайта не синхронизируются смастер ветка.Когда пользователь загружает «мастер» тарбол, он фактически получает вместо тега «мастер» вместо ветки.

Теперь, когда я так много разобрался, проблема, с которой я имею дело, навсегдаудаление тега из GitHub.Каждый раз, когда я удаляю его, с помощью git push origin :refs/tags/master или просто используя веб-интерфейс GitHub, он автоматически восстанавливается в течение нескольких секунд.Интересная деталь заключается в том, что когда он воссоздается, он создается из основной ветви.

Я понимаю, что тег будет воссоздан, если пользователи имеют тег в своих локальных репозиториях и отправляют их на удаленный компьютер.Итак, я понимаю, что мне нужно, чтобы все пользователи удалили этот локальный тег.Но тег не воссоздается с помощью push.По некоторым причинам, вне моего понимания, GitHub автоматически восстанавливает этот тег в течение нескольких секунд после его удаления.

Сначала я думал, что проблема возникает как в GH, так и в SF, поскольку тег продолжал появляться на обоих сайтах.Но только недавно я обнаружил, что причина, по которой он появился на SourceForge, была связана с программным обеспечением, поддерживающим синхронизацию двух репозиториев.Всякий раз, когда тег воссоздается на GitHub, программе предлагается отражать изменения в SourceForge.

Я обсуждал это с участниками моего собственного проекта и на канале GitHub IRC .Но я до сих пор не нашел ответа на вопрос, почему это происходит и как это предотвратить.

При поиске в Интернете информация, с которой я сталкиваюсь, связана с тем, как удалять удаленные теги.Но я не нашел ничего, что ссылается на тег с именем "master" и чем я занимаюсь на GitHub.

Наши теги проекта находятся здесь здесь, на GitHub .В настоящее время главный тег находится вверху списка и синхронизируется с главной веткой.Но это изменится, как только новые коммиты будут отправлены в главную ветку.Список тегов на SourceForge находится здесь .На момент написания этой статьи я удалил главный тег, поэтому он не будет указан в SF.Но я верю, что это изменится, когда репо синхронизируются снова.Не уверен, что простое нажатие на коммит приведет к воссозданию тега на SF, или если он будет вызван только изменениями, внесенными непосредственно в сам тег на GH.

1 Ответ

0 голосов
/ 08 октября 2018

Во время обычного git push, если git выдвигает заданную ссылку (скажем, refs/heads/master или refs/heads/some/branch), он также будет выдвигать любой тег, указывающий на любой коммит в истории этой ссылки.

Следовательно: вы можете удалить удаленный тег и вашу локальную копию тега, но если кто-либо, имеющий права на передачу в ваше репо, имеет тег локально, он заново создаст тег в центральном репо на своем следующемpush.


Один из способов предотвратить это может быть: запретить всем пользователям нажимать тег с именем master в вашем центральном репозитории github (я не знаком с правилами авторизации Github, я позволю вам искатькак это сделать), затем удалите удаленный и локальный тег.

...