Как проверить хорошую подпись подписанного тега git без использования команды «git verify-tag»

Я сделал подписанный тег git, используя эту команду: git tag -s <tag>

Есть ли другие альтернативы для проверки подписи этого тега без использования команды: или git tag -v <tag>?

Мой тег подписывается локально в локальном репозитории git, а затем переносится в удаленный репозиторий git bare. В моем случае проверка подписи должна выполняться не локально, а с помощью ловушки на стороне сервера во время операции отправки, которая может отклонить тег, если он не подписан. И ничего не возвращает на стороне сервера хука, так как тег не распознан и еще не создан на стороне сервера.

Что касается проверок git, упомянутых здесь https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work, существуют ли другие альтернативы для проверки подписи git с помощью, например, команд «git log» ?

Спасибо за помощь.

------------------------------ ОБНОВИТЬ ------------------- ----------------

Как @torek упоминает ниже в комментарии, имя тега еще не распознано сервером, поэтому я использую хэш-идентификатор тега вместо имени тега. Один шаг сделан!

Как я уже говорил выше, проверка подписи производится на стороне сервера через хук, написанный на C++. Таким образом, в моем коде C++ я использую общий код C++ для выполнения командной строки и получения ее вывода.

Вот код общей функции exec С++:

      #include <iostream>
#include <stdexcept>
#include <stdio.h>
#include <string>

std::string exec(const char* cmd) {
    char buffer[128];
    std::string result = "";
    FILE* pipe = popen(cmd, "r");
    if (!pipe) throw std::runtime_error("popen() failed!");
    try {
        while (fgets(buffer, sizeof buffer, pipe) != NULL) {
            result += buffer;
        }
    } catch (...) {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return result;
}

Эта функция exec работает для других команд. Но по неизвестной причине моя команда «git verify-tag <tag_hash>» ничего не возвращает в возвращаемой строке функции (то же самое при использовании команды «git verify-commit <commit_hash>»). Поэтому я не могу в своем коде C++ проанализировать вывод команды.

Но вывод странным образом появляется в окне командной строки, где выполняется команда проталкивания тега.

Есть идеи по проблемам? Является ли моя функция exec асинхронной?

--------------РЕШЕНИЕ-----------------------------------

Как ни странно, команда выводит вывод не на стандартный «stdout», а на «stderr».

Итак, моя проблема решена путем перенаправления вывода «stderr» на «stdout» с помощью команды git verify-tag <tag> 2>&1вместо git verify-tag <tag>

0 ответов

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