git дополняет коммит "Reviewed-by" - PullRequest
0 голосов
/ 29 октября 2018

Очевидно, не самая популярная ситуация, но у меня есть ряд коммитов, к сообщениям которых я хочу добавить строку Reviewed-by: user<mail>.

Пока что я нашел только эту команду, которая не работает для меня с Invalid line: 10: Reviewed-by: User <mail>

GIT_EDITOR='git interpret-trailers --trailer "Reviewed-by: User <mail>" --in-place' git rebase -i HEAD~8

Я тоже спрашивал по IRC, но безрезультатно.

Любые другие предложения приветствуются.

1 Ответ

0 голосов
/ 27 февраля 2019

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

git rebase HEAD~2 -x 'git commit --amend -m"$(git log --format=%B -n1)$(echo -ne \\nReviewed-by: User \<mail\>.)"'

Давайте разберем команду:

  1. git rebase HEAD~2 -x … выполняет перебазирование n коммитов (где n = 2) , к которым вы хотите добавить Reviewed-by, и для каждого коммита он останавливается и выполняет следующую команду оболочки.
  2. git commit --amend -m… вносит изменения в коммит и заменяет его сообщение следующим.
  3. git log --format=%B -n1 печатает сообщение "текущего" коммита.
  4. echo -ne \\nReviewed-by: User \<mail\>. это немного сложно. Очевидная часть заключается в том, что он добавляет текст Reviewed-by. Менее очевидным является то, что при выполнении встроенной команды удаляются завершающие пробелы, т. Е. Выходные данные предыдущей команды не имеют перевода строки. Итак, echo здесь добавляет символ новой строки, а затем текст.

Вы можете использовать его как есть, извлекая его из истории команд, или обернуть его в функцию bash / zsh, например ::

# adds reviwed-by to n commits
function git_rb() {
    # export arguments, otherwise they're not visible to inline shell executions
    export who=$1
    export mail=$2
    export n=$3
    git rebase HEAD~$n -x 'git commit --amend -m"$(git log --format=%B -n1)$(echo -e \\nReviewed-by: ${who} \<${mail}\>.)"'
}

, а затем использовать его как

$ git_rb "Holy Moly" "Holy@example.com" 5
...