Push to gerrit, используя SourceTree - PullRequest
14 голосов
/ 29 марта 2012

Я не могу понять, как заставить SourceTree подтолкнуть Геррита.

Я видел эту ссылку, но я все еще не понимаю, как это можно сделать: https://answers.atlassian.com/questions/29361/configuring-sourcetree-push-for-gerrit

Очевидно, согласно примечаниям к выпуску 1.3.3, есть способ сделать это, но я не могу понять это: http://www.sourcetreeapp.com/update/ReleaseNotes.html#version-1.3.3

Есть ли где-нибудь пошаговое руководство о том, как это сделать?

Прямо сейчас я запускаю эту команду на терминале, чтобы нажать

git push origin HEAD:refs/for/master

Ответы [ 2 ]

30 голосов
/ 28 апреля 2012

Я полагаю, что ответ, предоставленный atlassian, говорит об изменении имени удаленной ветви, когда вы видите диалоговое окно Push.

  1. Открыть диалоговое окно push
  2. Нажмите на название удаленной ветви под столбцом «Удаленная ветвь» (мой в настоящее время «главный»)
  3. Введите новыйимя ветки remo - для меня это будет 'refs / for / master'
  4. Нажмите OK.

Похоже, что это правильно выдвинуло коммиты в Gerrit для меня.У меня сейчас проблема в том, что значение refs / for / master не сохраняется.Теперь, чтобы понять это.Я буду обновлять этот пост, как только я понял это.Надеюсь, это поможет, даже если уже поздно в игре.

Обновление: оказывается, что вам нужно добавить push-запись под удаленным источником в .git / config.Вы должны сделать это с помощью команды git config (хотя я редактировал файл вручную, я уверен, что это плохая практика).Линия push, которую я написал:

push = refs/heads/*:refs/for/*

, для ясности, вот моя запись удаленного источника в .git / config:

[remote "origin"]
    url = ssh://gerrit-test.example.com:29418/mystuff.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = refs/heads/*:refs/for/*

В SourceTree вы можете теперь нажать, и он будетГеррит вместо финального репо.(теперь вы также можете просто выполнить git push без указания чего-либо еще, и это будет push to gerrit)Обратите внимание, что после нажатия SourceTree по-прежнему будет отображать число на кнопке, которое говорит, что у вас еще есть что нажать.Это связано с тем, что он по-прежнему извлекается из основного репо, а внесенные вами изменения в Gerrit еще не были объединены с основным репо.Как только ваши изменения будут объединены с мастер-репо, номер на кнопке исчезнет.

1 голос
/ 18 февраля 2014

Если у вас есть настройка с Git Flow (http://nvie.com/posts/a-successful-git-branching-model/), или аналогичная, вы часто хотите перенести свою локальную ветвь в другую удаленную ветвь. В таком случае общее правило push (упомянутое mozart27) не будет работать так, как если бы ваша локальная ветка всегда передавалась в соответствующую удаленную ветку.

Пример: У меня есть местная ветка "feature123", которая готова к рассмотрению (т.е. Gerrit). Наша отрасль интеграции - это «происхождение / развитие». Если я использую универсальное правило push, то «feature123» будет выдвинут для проверки на «origin / feature123», но я действительно хочу, чтобы оно выдвинулось для проверки на «origin / development».

Решение: В SourceTree вы можете создать пользовательское действие:

Menu caption: Push for review
Script to run: cmd
Parameters: /c git push origin $SHA:refs/for/develop

Не забудьте добавить Git к вашему пути, чтобы позволить cmd использовать его.

Затем, вместо того, чтобы нажимать «Push», вы щелкаете правой кнопкой мыши на вашем коммите и выбираете «Custom Actions -> Push for review».

Конечно, эти 2 решения могут сосуществовать, имея общее правило push, гарантирующее, что вы всегда отправляете для проверки при отправке в удаленную ветвь, и настраиваемое действие, когда вы хотите отправить ветвь функций для проверки в ветке интеграции.

...