Моя команда использует проверку кода Gerrit, по сути, это означает, что стандартное поведение push обходит стандартный рабочий процесс, поэтому вместо этого нам нужно использовать git push origin HEAD:refs/for/feature
, чтобы правильно отправить наш код для проверки.
Стандартное поведение pushвыглядит следующим образом:
user$ git push --dry-run
To https://gerrit.company.url/project
83fa2a5..aca3a22 feature -> feature
Это позволит обойти процесс проверки, который нежелателен.
Когда я устанавливаю push-ref-spec ( ссылка здесь ) равным refs/heads/*:refs/for/*
это делает шаг в правильном направлении:
user $ git config remote.origin.push refs/heads/*:refs/for/*
user$ git push --dry-run
To https://gerrit.company.url/project
* [new branch] master -> refs/for/master
* [new branch] old_stuff -> refs/for/old_stuff
* [new branch] feature -> refs/for/feature
Теперь он пытается подтолкнуть feature
к refs/for/feature
, что я хочу, но он также пытается подтолкнуть все мои ветви к источнику.Геррит отклоняет более одного запроса, поэтому я получаю вывод, подобный следующему:
user$ git push
....
To https://gerrit.company.url/project
! [remote rejected] master -> refs/for/master (no new changes)
! [remote rejected] old_stuff -> refs/for/old_stuff (duplicate request)
! [remote rejected] feature -> refs/for/feature (duplicate request)
, но я обнаружил, что если я назову текущую ветвь, она сделает то, что ожидаю:
user $ git push origin feature --dry-run
To https://gerrit.company.url/project
* [new branch] feature -> refs/for/feature
Это здорово, и я смогу использовать это, но я бы хотел сузить это больше.Я подумал, что если установить push.default
на current
, это будет означать, что git push
будет толкать только текущую ветвь таким образом, но к моему разочарованию:
user$ git config push.default current
user$ git push origin --dry-run
To https://gerrit.company.url/project
* [new branch] master -> refs/for/master
* [new branch] old_stuff -> refs/for/old_stuff
* [new branch] feature -> refs/for/feature
Это, кажется, игнорирует push.default
параметр, Из документации git config :
push.default
Определяет действие, которое git push
должно выполнить, если явно не указан refspecучитывая
Так что конфигурация remote.origin.push
интерпретируется как явная ссылка на спецификацию?Даже при настройке поведения push по умолчанию на nothing
он все равно пытается нажать на все ветви:
user$ git config push.default nothing
user$ git push
fatal: You didn't specify any refspecs to push, and push.default is "nothing".
user$ git config remote.origin.push refs/heads/*:refs/for/*
user$ git push origin --dry-run
To https://gerrit.company.url/project
* [new branch] master -> refs/for/master
* [new branch] old_stuff -> refs/for/old_stuff
* [new branch] feature -> refs/for/feature
Что мне здесь не хватает?Как мне заставить git push
выдвинуть только текущую ветку, как feature -> refs/for/feature
?