2016-11-29 2 views
0

Как заблокировать существующий тег git?Как заблокировать существующий тег git?

Цель состоит в том, чтобы сделать метку выпуска неизменной и предотвратить удаление другого тега релиза в удаленном репозитории. Я пробовал git tag -a tag_name, но тег по-прежнему удаляется.

+0

Возможно, вы сможете выполнить это с помощью крючка, q.v. [Здесь] (http://stackoverflow.com/questions/6390966/disable-tag-deletion). –

+2

Теги могут быть удалены точно так же, как ветви, коммиты, и на самом деле все можно удалить. Если вы хотите этого избежать, настройте сервер, чтобы отклонить такие изменения (аналогично, как вы его настроили, чтобы отклонить принудительные нажатия). – poke

+1

Возможный дубликат [Отключить удаление тега] (http://stackoverflow.com/questions/6390966/disable-tag-deletion) –

ответ

0

Если у вас есть общее центральное репо, вы можете установить крючок pre-receive на это центральное репо, чтобы отклонить любой push, который изменит уже существующий тег.

Если вы используете какой-либо активный сервер git (например: gitolite), вы можете обеспечить соблюдение такого правила в правах доступа, которые есть у каждого пользователя.

-1

Вы можете подписать тег.

Смотрите документацию для подписания тегов: Git Tools - Signing Your Work

+0

кажется, что подписанный тег все еще можно удалить, не так ли?почему я все еще мог удалить конкретный тег – ElvisHuang

+0

Если это так, вы также должны добавить крюк pre-receive, чтобы предотвратить удаление или перемещение существующего тега. Я по-прежнему рекомендую использовать подписанные теги – yorammi

1

В (локальных) хранилищах, ничего не защищено от удаления. Вы можете удалить практически все: ветки, коммиты и теги. Вы даже можете удалить весь репозиторий, просто удалив папку. В Git нет ничего, что могло бы или даже пытаться предотвратить это. В конце концов, это ваш репозиторий, поэтому вы можете делать с ним все, что хотите.

Это немного отличается после добавления удаленного репозитория к этому уравнению. Опять же, локальный репозиторий не может помешать вам удалять вещи в удаленном репозитории (и вы не хотите, чтобы локальный сервер отвечал за защиту удаленного в любом случае). Таким образом, Git позволяет вам что-то нажимать, даже если это означает, что удаленный репозиторий лишает какую-либо информацию (либо активно удаляя вещи, либо перезаписывая их чем-то другим).

Удаленный репозиторий сам по себе также не имеет защиты. Сам Git не имеет управления доступом в своих протоколах взаимодействия с удаленными репозиториями. Так что вам нужна третья сторона, которая не отвечает за этот материал. Для самостоятельных репозиториев Gitolite - это в значительной степени решение. Он поддерживает очень тонкую модель разрешения, и вы можете добавлять правила и исключения практически для каждого варианта использования. В частности, он позволяет защитить ветви и теги от (вредных) модификаций.

Если вы не являетесь самостоятельным владельцем, вам необходимо искать варианты защиты у вашего провайдера. Например, GitHub поддерживает защищенные ветви, которые позволяют вам предотвращать силовые нажатия на эти ветви. К сожалению, у него нет функции для тегов, поэтому вы все равно можете использовать теги push-push. У BitBucket есть более гибкая функция для разрешений филиалов, которая также позволяет создавать шаблоны. Возможно, вы можете использовать шаблон для указания тегов, но я честно не уверен в этом.

В общем, вы не можете защитить свой репозиторий от удаления тегов. Если это какая-либо помощь, если вы заметили, что теги были изменены или удалены, вы всегда можете принудительно нажать на свои локальные теги, чтобы сбросить состояние до того, как оно было.

Смежные вопросы