Подтвердить что ты не робот

Как 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
4b9b3361

Ответ 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'`