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

Если я запрашиваю API-интерфейс bitbucket для коммитов, я получаю длинную версию:

bitbucket_curl(){
    curl -H 'Authorization:Basic YW1JyKg==' "https://api.bitbucket.org$@"
}

commits="$(bitbucket_curl '/2.0/repositories/interos/datavana/commits/alex/dockerize?pagelen=3')"

latest_commit="$(echo "$commits" | jq -r '.values[0].hash')"

учитывая длительный коммит: c56cefbd0c81142558cf814cba7d7cd75d7cb6a7

Есть ли способ надежно получить короткий хеш коммита? Разве это не похоже на последние 10 символов или что-то? Или, возможно, есть способ запросить короткий хэш из API Bitbucket? На эту тему я ищу надежный способ получить самый последний коммит для ветки.

2 ответа

Решение

Я не очень хорошо знаю API Bitbucket, и требуется ли его конечным точкам полный хэш SHA-1, но, насколько я знаю, официальной короткой версии хэша коммитов не существует. Единственным общим требованием является то, что фрагмент используемого хэша может корректно преобразоваться в один коммит.

Сеть Bitbucket, кажется, отображает только первые 7 символов хэша SHA-1. Существует около 78 миллиардов различных хэшей длиной 7, поэтому вряд ли возникнет коллизия на одной странице.

В git есть команда для получения короткой версии хэша коммита, учитывая полный хэш коммита в качестве входных данных.

      git rev-parse --short $commit

Если $commit c56cefbd0c81142558cf814cba7d7cd75d7cb6a7, это выведет c56cefb

Нашел решение в этом ответе SO от user223092

Другие вопросы по тегам