"git push" к Герриту с отслеживающей веткой
Для внесения изменений в Gerrit требуется довольно эзотерическая команда
git push origin HEAD:refs/for/branchname
Мы написали это, но я ищу способ сделать это изначально. С мощным конфигом git похоже, что я могу предварительно сконфигурировать большую его часть [1], так что просто git push
достаточно... почти. Я застрял на remote.<name>.push
refspec.
Я уже могу создать ветку отслеживания тем, чтобы git pull
(без других параметров) будет тянуть изменения из удаленного апстрима в мою ветку темы. Тем не менее, с Gerrit, push и fetch refspecs не совпадают: один выбирает (сливается) из refs/heads/trackbranch
, но один подталкивает к refs/for/trackbranch
[2]
Я могу настроить push
refspec в remote.<name>.push
Однако синтаксис довольно простой: если я поставлюpush = refs/heads/*:refs/for/*
Тогда это будет пытаться подтолкнуть мой t-foo
ветка темы к refs/for/t-foo
, Но у Git есть информация, что t-foo
отслеживает trackbranch
, Могу ли я определить refspec, чтобы git автоматически пытался выдвинуть t-foo
к его refs/for/trackbranch
?
В настоящее время мы используем сценарий для этого, и я полагаю, что я мог бы определить push refspec для каждой ветви темы (возможно, с помощью большего количества сценариев). Я надеюсь, что для этого есть собственный способ Git, так что нам не нужно полагаться на собственные пользовательские сценарии для нашей команды.
[1] путем определения ветви отслеживания с git checkout origin/upstream_branch -b topic_branch
или в существующей ветви git branch --set-upstream-to origin/upstream_branch
[2] подталкивает к refs/for/*
создает набор изменений для просмотра. При наличии соответствующих разрешений можно нажать refs/heads/*
чтобы обойти обзор, но это сводит на нет большую часть точки Gerrit.
2 ответа
По какой-то причине:-) Я пошел дальше и попытался написать скрипт для установки записей git config, а затем обнаружил, что, похоже, нет никакого способа получить нужные результаты напрямую.
В качестве альтернативы я написал сценарий, который выдвигает "имя проверки геррита" (примечание: я фактически не использовал геррит, так что это практически не проверялось, хотя я запускал его с --dry-run
вариант и похоже, что он делает правильные вещи - но я ожидаю, что вы можете изменить его). Конечно, это, вероятно, функционально так же, как ваш собственный скрипт.
В любом случае, вы могли бы иметь глобальный или общесистемный псевдоним, git config alias.review
или что-то такое, что запускает скрипт, чтобы вы могли сказать git review
или же git review branch
, Псевдоним будет просто review = !sh /path/to/script
(аргументы будут переданы автоматически в этот момент).
Я поставил сценарий здесь: http://web.torek.net/torek/git/gerrit-review.sh.txt (.txt
расширение только для того, чтобы браузеры просматривали его по умолчанию, а не загружали его по умолчанию).
Вы смотрели в плагин git-review? Это должно отвечать всем требованиям вполне счастливо!