получить хеш будущей фиксации git до объединения PR

У меня есть конкретный сценарий. Я поднял один PR. Есть несколько коммитов для этого PR.

Теперь мне нужно получить хэш коммита, который будет сгенерирован после слияния этого PR с мастером. Можно ли получить хэш коммита перед его слиянием?

предположим, что один компонент приложения: xyz

  1. мы создали PR для этой функциональной ветки, чтобы освоить jenkins -> запуск сборки PR - > развертывание приложения на узле - > плагин jacoco в приложении создает файл exec

  2. PR-слияние произошло из мастер-сборки - сейчас нет развертывания CC ...

  3. После того, как развертывание завершено, из отдельного места запускается задание покрытия CC -›, которое берет исполняемый файл и передает его в сонар.

  4. здесь я пытался сделать это как .. имя файла exec будет иметь ‹Future_git_commit_hash›_xyz.exec

  5. в задании покрытия CC я проверю этот commit_id .. и затем отправлю в сонар. (здесь обычно нам не нужен commit_id, только master мы можем оформить заказ и нажать на сонар) ...

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

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


person Baitanik    schedule 19.10.2020    source источник
comment
Почему? Это похоже на проблему XY. Теоретически это можно было бы предсказать, если бы вы знали множество деталей, которые могут измениться (точное время выполнения коммита слияния, точный хеш коммита, в который он будет слит, и точный результат всего дерева файлов, в основном вы должны знать точное состояние целевой ветки на момент слияния).   -  person Joachim Sauer    schedule 19.10.2020
comment
Мне это нужно для обработки. На самом деле я думал, что когда PR будет поднят, github создаст временный идентификатор, используя такую ​​информацию, как временная метка, автор PR и т. д., и когда PR будет объединен, будет использоваться тот же идентификатор. но я предполагаю, что это не работает таким образом.. при слиянии PR снова он будет вычислять хеш.. потому что после повышения PR: если мы делаем следующее: git fetch origin +refs/pull/601/merge git checkout FETCH_HEAD тогда мы получаем один хэш git. Я подумал, можем ли мы сохранить его только для слияния.   -  person Baitanik    schedule 19.10.2020
comment
некоторая обработка на самом деле ничего нам не говорит. Все в ИТ можно описать как некую обработку. Если вы рассказали нам, что конкретно вы пытаетесь сделать, мы можем помочь вам найти действенное решение.   -  person Joachim Sauer    schedule 19.10.2020
comment
добавлено в само описание.   -  person Baitanik    schedule 19.10.2020


Ответы (2)


Нет, это невозможно.

Коммит содержит описание таких элементов, как:

  1. автор коммита,
  2. содержимое коммита (список файлов + каталогов, составляющих этот коммит),
  3. родители коммита
  4. метка времени создания коммита

Хэш коммита — это хеш всей этой информации. Поскольку невозможно заранее угадать временную метку, в которую произойдет фиксация, вы не можете заранее угадать, каким будет этот хэш.


Я предполагаю, что вы хотите использовать этот хэш для некоторой обработки: общий способ заключается в том, чтобы платформа, которая обрабатывает PR (github? azure devops?), запускала скрипт или вызов API после PR принято и объединено.

person LeGEC    schedule 19.10.2020
comment
Да, я использую github. Мне это нужно для некоторой обработки ... поэтому до того, как произойдет фиксация, это невозможно ... Я думал, что git создаст временный идентификатор, когда PR будет поднят с использованием этой временной метки, и все ... один и тот же идентификатор будет использоваться для слияния. .временная метка и т.д., когда PR был поднят. - person Baitanik; 19.10.2020
comment
как прокомментировал @JoachimSauer: можете ли вы объяснить, что вы хотите сделать с этим хешем коммита? - person LeGEC; 19.10.2020
comment
потому что после повышения PR: если мы сделаем следующее: git fetch origin +refs/pull/601/merge git checkout FETCH_HEAD, то мы получим один хэш git. Я подумал, можем ли мы сохранить его только для слияния. - person Baitanik; 19.10.2020

Нет, это невозможно, так как точное время будет включено в хэш коммита слияния.

person RomainValeri    schedule 19.10.2020