Я считаю, что флаг, который вы ищете, упоминается на странице GitHub плагина:
Например. Чтобы игнорировать изменения восходящего потока, измените 'failOnUpdateNeeded' на false:
release {
failOnUpdateNeeded = false
}
Edit
Похоже, что указанный выше флаг не работает по какой-то причине. Тем не менее, есть еще один способ сделать это sh, а именно добавить опцию принудительного действия sh к опции git
расширения release
(что за глупость) .
release {
git {
pushOptions = ['--force']
}
}
Это в основном приведет к принудительной перезаписи ветки (см. анализ проблем ниже), если только сервер, на котором размещен репозиторий, не настроен на отклонение таких принудительных нажатий. В этом случае здесь действительно нет варианта, который поможет.
Анализ проблемы
Как я сказал в моем последнем комментарии ниже, часть, которая терпит неудачу, - это когда extension запускает задачу preTagCommit
, а затем пытается сделать sh эту фиксацию в восходящей ветке (например, master
). Вы можете увидеть эту команду pu sh справа здесь .
Ну, конечно, это не удастся, если кто-то уже отправил фиксацию в эту ветку.
Теперь проще способ исправить это было бы, если бы авторы плагина дали нам возможность сказать
Don't pu sh preTag коммитирует апстрим
или
Pu sh preTagCompts к ветке с именем foo
К сожалению, они не предоставили нам эту возможность (по крайней мере, из того, что я собрал до сих пор ). Поэтому я придумал несколько хакерских решений, чтобы обойти это.
Решения / Хаки
Укажите pushToBranchPrefix Создайте ветку с тегами
Это - это еще один параметр , который может быть передан объекту git
, что приводит к тому, что все нажатия, которые он делает, выполняются в определенной ветке c с заданным префиксом, а не в текущей ветке:
Например:
afterReleaseBuild {
doFirst {
project.exec {
executable = 'git'
args 'checkout', '-b', 'v1.x.x@master'
}
}
}
Замените v1.x.x
чем-то, что соответствует тегу для текущего выпуска.
Это означает, что всякий раз, когда плагин пытается нажать / зафиксировать , он вместо этого отправит / зафиксирует эту ветку, которую мы создали, и, наконец, создаст тег из этой ветки. 1075 *
Поскольку задача preTagCommit
терпит неудачу, мы можем отключить задачу, и она больше не будет запускаться:
tasks.named('preTagCommit') {
enabled = false
}
Определите для себя, приемлемо ли это.
Динамика c пу sh поведение
Поскольку я видел исходный код, я могу увидеть , что причина, по которой он нажимает, заключается в том, что он видит, что git.pushToRemote
не является нулевым. Зная это, мы можем динамически управлять этим поведением.
tasks.named('preTagCommit') {
def pushToRemote = null
doFirst {
project.extensions.configure(net.researchgate.release.ReleaseExtension) {
pushToRemote = it.git.pushToRemote
it.git.pushToRemote = null
}
}
doLast {
project.extensions.configure(net.researchgate.release.ReleaseExtension) {
it.git.pushToRemote = pushToRemote
}
}
}
Таким образом, в preTagCommit
, он не будет sh ничего, но будет успешным для всего остального.