как «нажать - теги», игнорируя некоторые? - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы нажать на все теги, кроме пары, которые не нужны.Возможно ли это сделать, не удаляя их в первую очередь?

Сценарий: автоматическая система выпуска назначает тег выпуска самой последней фиксации главной ветви, скажем, V3.1.Он также перемещает тег 'LATEST' в тот же новый коммит.(на самом деле создаются более уникальные и неуникальные теги).

Итак, я хотел бы сделать push --tags, но игнорировать 'ПОСЛЕДНИЕ'.Есть идеи как это сделать?

Ответы [ 4 ]

0 голосов
/ 18 декабря 2018

Если вы не хотите, чтобы LATEST рассматривался как тег, не делайте его тегом.Вы можете держать совершенно произвольные большие пальцы в графе фиксации,

git update-ref LATEST v3.1^{}

является самым простым, хотя было бы целесообразно придираться к этому из-за его небрежного использования условно зарезервированного пространства имен (это полностью глобальная ссылка, как HEAD), так что, возможно, git update-ref refs/cithumbs/LATEST v3.1^{} будет лучше профессиональной инженерии.^{} предназначен для того, чтобы быть уверенным в достижении базового коммита (см. git help revisions ) в случае, если вы используете аннотированные (например, подписанные или прокомментированные) теги, которые переносят данные в их собственный объект.

Поскольку ветвление git в буквальном смысле невероятно легкое - как, например, трудно заставить людей привыкнуть к вращениям других vcs, чтобы поверить, насколько это легко - вы можете просто использовать ветку:

git branch -f LATEST v3.1

, который по сути точно эквивалентен

git update-ref refs/heads/LATEST v3.1^{}

(команда branch также устанавливает reflog по умолчанию, что вы можете захотеть и можете получить `update-ref для вас за любой ref,см. документацию reflog).

0 голосов
/ 18 декабря 2018

Теги Git не предназначены для перемещения, и руководство описывает это.

Git поддерживает два типа тегов: легкие и аннотированные.

Легкие теги оченьочень похоже на ветку, которая не изменяется - это просто указатель на конкретный коммит.

Однако аннотированные теги хранятся как полные объекты в базе данных Git.Они контрольные суммы;содержать имя тега, адрес электронной почты и дату;иметь сообщение с тегами;и может быть подписано и проверено с помощью GNU Privacy Guard (GPG).(Источник: Git Manual )

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

Чтобы изменить место, куда указывает ветвь, извлеките ветку и сбросьте --hard на новый sha.Например (при условии, что de39a48 является новым последним коммитом после выпуска).

git checkout latest git reset --hard de39a48

0 голосов
/ 18 декабря 2018

Если я правильно понял, я вижу два способа сделать то, что вам нужно:

  1. вставить только тег, только что созданную вами работу, например: сохранить имя тега в некотором $tagи запустите:

    git push origin $tag
    
  2. вы хотите нажать более одного тега, и все теги, созданные заданием, будут следовать одному и тому же шаблону: V3.1, V3.2 и т. д....
    в этом случае используйте refspec, который соответствует только этим тегам:

    git push origin "refs/tags/V*:refs/tags/V*"
    

См. Раздел refspec в git help push

0 голосов
/ 18 декабря 2018

Вы можете попробовать

git push --dry-run --tags LATEST^

Он будет толкать каждый тег до фиксации перед тем тегом, на который указывает ваш тег.

Я не уверен,push Команда refspec принимает хэши коммитов, но это пробный прогон, поэтому на самом деле она ни на что не повлияет.Затем перейдите к реальной ситуации, если результат соответствует вашим ожиданиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...