Получить новые теги для текущего коммита, не выбирая новые коммиты - PullRequest
0 голосов
/ 18 декабря 2018

Допустим, я делаю коммит и нажимаю его, затем кто-то другой тянет мой коммит, создает на нем один или несколько тегов, делает еще несколько коммитов, а затем снова все толкает.

Как мне теперь получитьновые теги для коммита, который у меня уже есть на моей машине, без извлечения большего количества коммитов (т. е. git pull не считается)?

Редактировать: Мой стимул - экономить время и ресурсы,По сути, всякий раз, когда я отправляю новый коммит в GitLab, в GitLab запускается цепочка автоматизированных заданий.Первый анализирует сообщение о коммите (которое следует определенному соглашению), а затем решает, какой тип изменения версии будет уместным, затем проверяет тег версии для предыдущего коммита и создает новый для текущего коммита с соответствующим выпуском версии..
Затем запускается следующая работа.Эта работа может быть ответственна за компиляцию исходного кода.Затем запускается другое задание, которое может отвечать за создание архива исходного кода.
Каждое задание выполняется в своем собственном временном контейнере Docker, и все контейнеры включают в себя папку, представляющую хранилище на момент отправки.Таким образом, вновь созданный тег, который создается в первом задании, должен быть выбран в начале заданий 2 и 3 (эти задания должны знать номер версии, например, чтобы присвоить собственному имени архив исходного кода).Это было бы пустой тратой ресурсов, чтобы каждый раз делать полный git fetch.Особенно, когда вы делаете несколько коммитов в течение очень короткого периода времени.
Также возможно вручную запустить цепочку заданий старого коммита.В этом случае вы потенциально могли бы получить тысячи коммитов, которые вам не нужны для заданий 2 и 3.
На самом деле на самом деле их больше, как 15, но мне пришлось упростить вещи, иначе мне пришлось бы написать книгу.

Ответы [ 2 ]

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

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

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

Если шаг 1 создает, в дополнение к любым вычисляемым тегам версии, один тег с именем, известным для шагов2 и 3, вы можете получить этот тег с опцией --tags и получить то, что вы просите.

source-repo $  git tag v1.3.7
source-repo $  git tag -f current_build
source-repo $  cd path/to/target/repo
target-repo $  git fetch source-repo current_build
From url://of/source/repo
 * tag               current_build        -> FETCH_HEAD
 * [new tag]         v1.3.7        -> v1.3.7
 * [new tag]         current_build        -> current_build
0 голосов
/ 18 декабря 2018

Отказ от ответственности: неверное решение, ответ сохраняется только для дальнейших исследований.

git fetch --tags <commitID>

ограничит диапазон команды fetch только этим коммитом.

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

git fetch --dry-run --tags <commitID>
...