Gerrit-cherry-pick: fatal: 'origin' не похоже на репозиторий git

Я столкнулся со следующей ошибкой при попытке сделать gerrit-cherry-pick, я сделал git remote -v и вижу, что origin указывает на ssh://[email protected]:29418/tech-ci.git, может ли кто-нибудь дать руководство о том, почему возникает эта ошибка? Как отладить это дальше и исправить?

2018-08-09 21:13:15 change-merged   runCmd               169    INFO    : Running command git --git-dir=/gerrit_v2/hooks/tech_projects/tech-ci/.git --work-tree=/gerrit_v2/hooks/tech_projects/tech-ci remote -v
2018-08-09 21:13:15 change-merged   runCmd               173    INFO    :
origin  ssh://[email protected]:29418/tech-ci.git (fetch)
origin  ssh://[email protected]:29418/tech-ci.git (push)

2018-08-09 21:13:15 change-merged   runCmd2              180    INFO    : Running command /gerrit_v2/hooks/gerrit-cherry-pick origin 20633/2
2018-08-09 21:13:15 change-merged   runCmd2              187    INFO    : fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Геррит-вишня-кирка:

usage() {
  echo >&2 "usage: $0 remote changeid..."
  echo >&2 "usage: $0 --continue"
  echo >&2 "usage: $0 --skip"
  echo >&2 "usage: $0 --abort"
  echo >&2 "usage: $0 [--close|--replace] remote"
  exit 1
}

die() {
  echo >&2 "fatal: $1"
  exit 1
}

GIT_DIR=$(git rev-parse --git-dir) || exit
CL = "$GIT_DIR/GERRIT_CHANGES"
STATE = "$GIT_DIR/rebase-gerrit"
TODO = "$STATE/todo"

RESOLVEMSG = "
When you have resolved this problem run \"$0 --continue\".
If you would prefer to skip this patch, run \"$0 --skip\".
"

pop_action() {
  sed -e 1d <"$TODO" >>"$TODO".new
  mv -f "$TODO".new "$TODO"
}

mark_done() {
  read commit changeid <"$TODO"
  changeid=$(get_changeid "$changeid")
  head_after=$(git rev-parse HEAD^0)
  head_before=$(cat "$STATE/head_before")
  if ! test $head_after = $head_before
  then
    echo $head_after >"$CL/$changeid"
  fi
  pop_action
}

do_next() {
  while test -s "$TODO"
  do
    read commit changeid <"$TODO"
    git rev-parse HEAD^0 >"$STATE/head_before"
    git format-patch \
        -k --stdout --full-index --ignore-if-in-upstream \
        $commit^..$commit |
    git am $git_am_opt --rebasing --resolvemsg = "$RESOLVEMSG" || exit
    mark_done
  done

  echo >&2 "Done."
  rm -rf "$STATE"
}

git_am_opt=
if test -f "$STATE/git_am_opt"
then
  git_am_opt=$(cat "$STATE/git_am_opt")
fi

while test $# != 0
do
  case "$1" in
  --continue)
    test -f "$TODO" || die "No cherry-pick in progress?"
    git am $git_am_opt --rebasing --resolvemsg = "$RESOLVEMSG" --resolved || exit
    mark_done
    do_next
    exit
    ;;
  --skip)
    test -f "$TODO" || die "No cherry-pick in progress?"
    git reset --hard HEAD || exit
    git am --skip || exit
    pop_action
    do_next
    exit
    ;;
  --abort)
    test -f "$TODO" || die "No cherry-pick in progress?"
    git reset --hard HEAD
    git am --skip
    rm -rf "$STATE"
    ;;
  --close|--replace)
    shift
    test -d "$CL" || die "No changes to close"
    test $# = 1   || usage
    remote=$1
    printf %s "git push $remote" >&2
    rs=$(cd "$CL" && for change_id in *; do
      test "$change_id" = '*' && die "No changes to close"
      c=$(cat "$change_id");
      echo "$c:refs/changes/$change_id";
      echo ' \' >&2;
      printf %s "  $c:refs/changes/$change_id" >&2
      done)
    echo >&2
    echo >&2
    git push $remote $rs
    rc=$?
    test $rc = 0 && rm -rf "$CL"
    exit $rc
    ;;
  --whitespace=*)
    git_am_opt = "$git_am_opt $1"
    ;;
  --committer-date-is-author-date|--ignore-date)
    git_am_opt = "$git_am_opt $1"
    ;;
  -C*)
    git_am_opt = "$git_am_opt $1"
    ;;
  -s|--signoff)
    git_am_opt = "$git_am_opt $1"
    ;;
  -*)
    usage
    ;;
  *)
    break
    ;;
  esac
  shift
done

get_changeid() {
  case $1 in
  */*) echo ${1%%/*} ;;
  *)   echo $1 ;;
  esac
}

to_ref() {
  case $1 in
  */*)
    change_id=${1%%/*}
    patchset_id=${1##*/}
    ;;
  *)
    change_id=$1
    patchset_id=1
    ;;
  esac

  hash=$(($change_id % 100))
  case $hash in
  [0-9]) hash = "0$hash" ;;
  esac

  echo "refs/changes/$hash/$change_id/$patchset_id"
}

get_revid() {
  grep $(to_ref $1) <"$GIT_DIR/FETCH_HEAD" | cut -f1
}

# Initialize state
#
test $# -lt 2 && usage
remote = "$1"
shift

mkdir "$STATE" || die "cherry-pick already in progress"
echo $git_am_opt >"$STATE/git_am_opt"

if ! git fetch $remote $(for id; do to_ref $id; done)
then
  rm -rf $STATE
  exit 1
fi

(for id
 do
  if revid=$(get_revid $id)
  then
    echo "$revid $id"
  else
    echo >&2 "fatal: $id not found"
    exit 1
  fi
done) >"$TODO"

mkdir -p "$CL"
echo >&2
do_next

Добавьте к своему вопросу содержимое файла / gerrit_v2 / hooks / gerrit-cherry-pick.

Marcelo Ávila de Oliveira 10.08.2018 14:11

@ MarceloÁviladeOliveira - Я получил gerrit-cherry-pick от https://gerrit-review.googlesource.com/Documentation/cmd-che‌​rry-pick.html#_obtai‌​ning, я сомневаюсь, что это имеет какое-либо отношение к файлу gerrit-cherry-pick

Ritz 10.08.2018 17:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
182
2

Ответы 2

Это будет означать, что учетная запись пользователя, создающая эту команду, не имеет открытого SSH-ключа ~/.ssh/id_rsa.pub по умолчанию, зарегистрированного в ~waccount/.ssh/authorized_keys на сервере tech-gerrit.sd.company.com.

Если возможно, попробуйте в той же последовательности команд выполнить

ssh -Tv -p 2941 [email protected] 

Это отобразит более подробную информацию о неудачной попытке подключения.

Если это невозможно, попробуйте и убедитесь, что для переменной среды GIT_SSH_COMMAND установлено значение «ssh -v».

Я выполнил указанную выше команду и получил сообщение **** Welcome to Gerrit Code Review ****^M ^M Hi waccount, you have successfully connected over SSH.^M, так что похоже, что он зарегистрирован, в чем еще может быть проблема, что можно попробовать? я сталкиваюсь с проблемой при запуске этой команды из крючка gerrit, не вижу, когда я запускаю это вне крючка

Ritz 10.08.2018 07:08

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

VonC 10.08.2018 08:17

@Flair Если это так, то установите для переменной среды GIT_SSH_COMMAND значение «ssh -v» и посмотрите, генерирует ли это больше журналов.

VonC 10.08.2018 08:18

Как Марчелло указал выше, хотя текущий рабочий каталог является клоном репозитория, команды, похоже, выполняются из чистого (gerrit) репозитория, у меня, похоже, такая же проблема при запуске любой другой команды git, любые указатели на то, как исправить это?

Ritz 10.08.2018 17:47

Кажется, вы выполняете команды в чистом репозитории (репозиторий Gerrit), а не в дереве работы (клон репозитория). Помните, что хуки выполняются внутри репозитория Gerrit, который их запускает.

Я явно изменяю cwd для запуска из рабочего дерева (клон репозитория), но, как вы сказали, хотя текущий рабочий каталог является клоном репозитория, команды, похоже, выполняются из чистого репозитория, у меня такая же проблема при запуске любого другого Команда git также, любая идея, почему? какие-либо указатели на то, как это отлаживать? действительно ценю

Ritz 10.08.2018 17:41

Как это изменить?

Ritz 10.08.2018 19:36

Я первый спросил :-)

Marcelo Ávila de Oliveira 10.08.2018 20:33

Я просто использовал chdir для изменения рабочего каталога, когда gerrit-cherry-pick запускается, я печатаю os.getcwd (), и он указывает на клон репозитория, но каким-то образом команды запускаются в репозиториях gerrit, не в состоянии взломать это? Некоторые настройки среды? Любые указатели?

Ritz 10.08.2018 20:40

Другие вопросы по теме