git alias для HEAD: refs / for / master - PullRequest
       1

git alias для HEAD: refs / for / master

24 голосов
/ 15 сентября 2011

Я настраиваю Gerrit и хотел бы не писать:

git push gerrit HEAD:refs/for/master

Я хотел бы написать:

git push review

Я уверен, что возможно изменить .git/config, но я не могу заставить его работать.

Ответы [ 8 ]

24 голосов
/ 02 января 2012

Я установил два разных типа push: просмотр и просмотр:

для отзывов:

git config remote.review.pushurl ssh://<GERRIT_HOST>:29418/<PROJECT_PATH>.git
git config remote.review.push refs/heads/*:refs/for/*
git push review # this will push your current branch up for review

для обхода проверки:

git config remote.noreview.pushurl ssh://<GERRIT_HOST>:29418/<PROJECT_PATH>.git
git config remote.noreview.push refs/heads/*
git push noreview # this will push your current branch up, bypassing review

Обратите внимание, что есть некоторые изменения в проекте Gerrit Project, которые должны быть внесены владельцем проекта / администратором Gerrit, чтобы также обойти проверку. Я думаю, что разрешение "Push" нужно будет добавить в проект для ссылок / * (если вы не уточняете, в какой ветке вы разрешите обходить проверку). Однако, для обзоров, разрешения, необходимые для публикации, уже будут установлены. Другими словами, если ваш

git push gerrit HEAD:refs/for/master

работает, чем приведенная выше часть "обзора" должна работать, не изменяя ничего другого.

5 голосов
/ 06 декабря 2011

Почему бы не создать псевдоним bash?

alias review="git push gerrit HEAD:refs/for/master"

Теперь вы можете просто набрать:

review

Если вы хотите работать на больше , чем одна ветвь геррита, проверьте мои помощники bash: https://github.com/tomwys/gerrit-bash-commands

4 голосов
/ 04 января 2012

Что вам лучше всего делать, так это Git-скриптлет в вашем псевдониме.Нечто подобное работает на основе ветки «upstream», хотя я бы хотел немного позаботиться об этом:

~ / .gitconfig

[alias]
  pub = "!f() { git push -u ${1:-origin} HEAD:`git config branch.$(git name-rev --name-only HEAD).merge | sed -e 's@refs/heads/@refs/for/@'`; }; f"

Таким образом, вы можетепросто наберите:

git pub

, и это так же, как вы ввели:

git push -u origin HEAD:refs/for/master

или

git push -u origin HEAD:refs/for/myremote-branch

Единственное требование для этого - то, что он совместим только соболочка Git Bash в Windows или одна из многих оболочек Linux.

3 голосов
/ 06 декабря 2013

Вас также может заинтересовать git-review , который не только устраняет push, просто обеспечивая:

git review

... но также позволяет вам делать вещикак:

git review branchname

Ознакомьтесь с разделом использования по ссылке выше для получения дополнительной информации.

1 голос
/ 20 августа 2012

И если вы хотите разрешить прямой толчок для ветвления в ссылках / заголовках / вы просто добавляете право в веб-интерфейсе gerrit:

  1. открыть свойства проекта,
  2. выбрать доступ
  3. Добавить ссылку,
  4. ссылки / головы / *
  5. выбрать "Push"
  6. имя группы типов,
  7. ссылки / головы /*
  8. сохранить.

все готово.

1 голос
/ 15 сентября 2011

Возможно не совсем то, что вы ищете, но если вы:

  1. Переименуйте gerrit в reviewgit remote rename gerrit review),
  2. git config push.default trackingи
  3. git config branch.master.merge refs/for/master,

, тогда вы можете git push review, и ваш мастер будет выдвинут на refs/for/master на геррите., если вы git config branch.master.remote review, то вы можете просто git push и получить то же самое.

0 голосов
/ 25 апреля 2017

Привет, просто создайте простой скрипт для автоматизации процесса:

   #!/bin/bash

   GROUP1_REVIEWER="group1 list of mail separated by space"
   GROUP2_REVIEWER="group2 list of mail separated by space"
   GROUP3_REVIEWER="group3 list of mail separated by space"

   ORIGIN=$(git config --get remote.origin.url)
   [ $? -ne 0 ] && echo "Git repo not found; EXIT" && exit 1

   case $1 in
       group1) REVIEWER_LIST=$GROUP1_REVIEWER ;;
       group2) REVIEWER_LIST=$GROUP2_REVIEWER ;;
       group3) REVIEWER_LIST=$GROUP3_REVIEWER ;;
       *) echo "Please specify one existent group"; exit 1 ;;
   esac

   [ "$1" == "" ] && echo "Please specify one existent group" && exit 1

   pushurl=${ORIGIN}
   push="HEAD:refs/for/master"
   receivepack="$(printf "git receive-pack "; for reviewer in $REVIEWER_LIST ; do printf -- "--reviewer $reviewer "; done)"

   # check if review remote is already present
   git config -l | grep remote.review 1>/dev/null 2>&1
   [ $? -eq 0 ] && echo "Remote review already present; configure it manually; EXIT" && exit 1

   # start config
   echo "Adding new remote review config"
   git config remote.review.pushurl $pushurl
   git config remote.review.push $push
   git config remote.review.receivepack "$receivepack"

Вы будете использовать как:

git_review_add_config.sh group1

И выберите другую группу, которую нужно настроить.

0 голосов
/ 02 ноября 2015

Те из вас, кто хочет протолкнуть только мастер-ветку через геррит, добавят следующее к .git\config

[remote "review"]                                                        
    push = HEAD:refs/for/master                 
    pushurl = ssh://GERRIT_URL:29418/PROJECT_NAME

или выполнить в проекте dir

git config remote.review.push HEAD:refs/for/master
git config remote.review.pushurl ssh://GERRIT_URL:29418/PROJECT_NAME

Тогда вы можете использовать

git push review

чтобы подтолкнуть к Герриту. Используя этот метод, вы можете вытолкнуть из любой вашей локальной ветки, и данные всегда будут идти в главную ветку

...