Как git -pull заданный набор патчей от Gerrit?
При работе с Gerrit (Code Review) мне часто нужно получить копию данного набора патчей для тестирования или проверки. Очевидным и простым способом является загрузка архива или файла исправления через веб-интерфейс Gerrit и его применение вручную к локальному источнику.
В то время как вышеупомянутые шаги довольно просты и соответствуют моим потребностям, в лучшем мире я хотел бы, чтобы набор патчей отображался как коммит в локальном Git.
Я оглядывался и не нашел решения. Я нашел некоторую разреженную информацию, которая после компиляции дает следующее решение.
Скажите, что вы хотите вытащить набор патчей 2 из изменения Gerrit 1222:
Найдите интересующие нас удаленные ссылки:
$ git ls-remote | grep 1220
From http://something.com:8081/MyProject
e2e0212a59240ac5cd7c11220c35542523f44b59 refs/changes/13/713/1
b8c4dceea5eaf1bad711b0ea6938c80ec932726a refs/changes/20/1220/1
6f20c182ec7f54a2aa9e8f6188a0eef1b0790df4 refs/changes/20/1220/2
ed94a98386d224ce3d86004ce99f61220905a077 refs/changes/22/1222/1
Вытяните ref:
git pull origin refs/changes/20/1220/2
Это создаст точку фиксации Git, которую вы в конечном итоге можете переупаковать:
git rebase
Ответы
Ответ 1
Эта функция является стандартной в пользовательском интерфейсе Gerrit.
В правом верхнем углу пользовательского интерфейса для патча нажмите "Загрузить", и вы увидите что-то вроде:
![Gerrit Change Screen Download]()
Когда вы просматриваете патчи, вы переходите в раздел загрузки и копируете команду командной строки для проверки набора патчей, например:
git fetch https://gerrit.googlesource.com/gerrit refs/changes/03/64403/2 && git checkout FETCH_HEAD
Затем я обычно создаю ветку с номером обзора и набором патчей как имя
git checkout -b b64403-2
Здесь вы можете нормально работать и фиксировать свои изменения или вишнево-выбрать/переустановить свои изменения при этом изменении.
После того, как будет проведен обзор r64403, ваш код может быть объединен или когда будет представлен другой пакет патчей, вам нужно будет сделать то же самое снова.
Если вы не видите опции для загрузки опции Checkout
или Cherry Pick
, вам необходимо отредактировать gerrit.config
, что-то вроде этого:
[download]
scheme = ssh
command = checkout
command = cherry_pick
Более подробную информацию можно найти в Gerrit Documentation
Обновление:
Поскольку barryku правильно указывает, в более поздней версии вам необходимо загрузить плагин downloads-commands. Это можно сделать во время начальной настройки или с помощью следующей команды:
java -jar gerrit-2.11.4.war init -d review_site --batch --install-plugin download-commands
Ответ 2
Или вы можете использовать опцию -d
для git-review
. Например, если вы работаете с хранилищем nova-docker и были заинтересованы в этом изменении в gerrit:
Вы можете загрузить последнюю версию патчей так:
git review -d 148486
Или вы можете использовать идентификатор изменения:
git review -d I35729a86e211391f67cc959d19416c9125c6f9eb
Вы также можете запросить конкретную ревизию исправления, добавив запятую и номер патча. Например, чтобы получить вторую ревизию этого патча:
git review -d 148486,2
Ответ 3
Я не уверен на 100% в чем ваш вопрос. Звучит так, будто вы хотите облегчить рабочий процесс или ввод текста. жаворонки уже упоминали git review
, который в основном используется.
В вашем случае, возможно, это поможет автоматически загрузить все ссылки, чтобы вы могли ссылаться на них напрямую. Вы всегда можете все указанные ссылки, как с
git fetch origin "+refs/changes/*:refs/remotes/origin/changes/*"
Затем вы можете работать локально с идентификатором фиксации.
Простой псевдоним или создание сценария для всех ссылок может быть легко сделано. Пример такого цикла while можно найти в скрипте на https://github.com/saper/gerrit-fetch-all С таким небольшим фрагментом оболочки вы легко можете пропустить одну часть ref id, чтобы легче было ссылаться на них:
Server side: Client side:
refs/changes/13/713/1 refs/head/713/1
refs/changes/20/1220/1 refs/head/1220/1
refs/changes/20/1220/2 refs/head/1220/2
refs/changes/22/1222/1 refs/head/1222/1
Ответ 4
Как уже упоминалось в комментариях, вы можете просто получить нужную команду git из графического интерфейса gerrit. Если вам действительно не нравятся графические интерфейсы или вы хотите его автоматизировать (и по какой-то причине не можете использовать git-review
), вы можете использовать API-интерфейс gerrit:
curl -s 'https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION&o=DOWNLOAD_COMMANDS' | tail -n+2 | jq -r '.revisions[.current_revision].fetch["anonymous http"].commands.Pull' | bash -
или
git pull origin `curl -s 'https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION' | tail -n+2 | jq -r '.revisions[.current_revision].ref'`