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

Git псевдоним для HEAD: refs/for/master

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

git push gerrit HEAD:refs/for/master

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

git push review

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

4b9b3361

Ответ 1

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

для отзывов:

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, которые должны быть сделаны администратором проекта /Gerrit Admin, чтобы обойти обзор. Я думаю, что разрешение "Push" должно быть добавлено в проект для refs/* (если только вы не уточните, в какой ветки вы разрешите в обход обзора). Тем не менее, для отзывов, разрешения, необходимые для публикации, уже будут настроены. Другими словами, если ваш

git push gerrit HEAD:refs/for/master

работает, чем выше рассмотренная выше часть выше, не изменив ничего.

Ответ 2

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

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

Теперь вы можете просто ввести:

review

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

Ответ 3

То, что вам лучше всего сделать, это скрипт сценария Git в вашем псевдониме. Что-то вроде этого работает, основываясь на ветке "вверх по течению", хотя я бы немного почистил это:

~/.gitconfig

[alias]
  pub = "!f() { git push -u ${1:-origin} HEAD:`git config branch.$(git name-rev --name-only HEAD).merge | sed -e '[email protected]/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.

Ответ 4

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

git review

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

git review branchname

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

Ответ 5

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

  • Переименуйте gerrit в review (с помощью git remote rename gerrit review),
  • git config push.default tracking и
  • git config branch.master.merge refs/for/master,

тогда вы можете git push review, и ваш мастер будет нажат на refs/for/master на gerrit.

И, кстати, если вы git config branch.master.remote review, тогда вы можете просто git push и получить то же самое.

Ответ 6

И если вы хотите разрешить прямой push для ветки в refs/heads/, вы просто добавляете право в gerrit web gui:

  • открыть свойства проекта,
  • выберите доступ,
  • Добавить ссылку,
  • refs/heads/*
  • выберите "Push"
  • введите имя группы,
  • refs/heads/*
  • сохранить.

youre done.

Ответ 7

Те из вас, кто хочет нажать только, чтобы овладеть веткой через gerrit, добавьте следующее в .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

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

Ответ 8

Привет, просто создайте простой script, чтобы автоматизировать процесс:

   #!/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

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