Как сделать ветку из тега SVN с помощью Maven? - PullRequest
3 голосов
/ 14 июля 2010

Предположим, я пометил релизную версию нашего проекта под $SVNROOT/project/tags/1.0.Предположим теперь, что мне нужно создать ветку из этого тега, пометить ее как SNAPSHOT и обновить конфигурацию scm.

Я попытался с целью release:prepare таким образом:

$ svn co $SVNROOT/project/tags/1.0 project-1.0
$ cd project-1.0
$ mvn release:branch -DbranchName=project-1.0.X -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false

Но это терпит неудачу, с сообщением об ошибке, предупреждающим меня, что у меня нет прав на коммит в пути $SVNROOT/project/tags/1.0 project-1.0 (что совершенно верно - мы не разрешаем коммиты в тегах).

Что я здесь не так делаю и почему Maven пытается что-то зафиксировать в теге?

Обновление

Просто чтобы уточнить: я запустив это из каталога, в который я проверил тег.Точная ошибка, которую я получаю, следующая:

[INFO] Executing: /bin/sh -c cd xxx && svn --non-interactive commit --file /tmp/maven-scm-28755080.commit --targets /tmp/maven-scm-535803351230252749-targets
[INFO] Working directory: xxx
org.apache.maven.shared.release.scm.ReleaseScmCommandException: Unable to commit files
Provider message:
The svn command failed.
Command output:
svn: Commit failed (details follow):
svn: 'pre-commit' hook failed with error output:
you do not have the rights to access this file: xxx/tags/xxx. 


        at org.apache.maven.shared.release.phase.ScmCommitPhase.checkin(ScmCommitPhase.java:133)
        at org.apache.maven.shared.release.phase.ScmCommitPhase.execute(ScmCommitPhase.java:109)
        at org.apache.maven.shared.release.DefaultReleaseManager.branch(DefaultReleaseManager.java:379)
        at org.apache.maven.shared.release.DefaultReleaseManager.branch(DefaultReleaseManager.java:350)
        at org.apache.maven.plugins.release.BranchReleaseMojo.execute(BranchReleaseMojo.java:133)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:284)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to commit files
Provider message:
The svn command failed.
Command output:
svn: Commit failed (details follow):
svn: 'pre-commit' hook failed with error output:
you do not have the rights to access this file: xxx/tags/xxx. 

Ответы [ 4 ]

4 голосов
/ 14 июля 2010

Где вы выполнили эту команду mvn release:branch?

Как упоминается в этой теме :

Что определяет плагин doco, так это то, что цель release:branch должна быть вызывается из кассы с revision/tag, который вы хотите разветвить от . (т.е. tags/<my_release_version>).

Я использовал следующую командную строку для создания ветви обслуживания (branches/myapp-1.3.1) из существующего местоположения тега (tags/myapp-1.3):

mvn release:branch -DbranchName=myapp-1.3.1 -DupdateBranchVersions=true
-DupdateWorkingCopyVersions=false

Флаг -DupdateBranchVersions относится к версиям в pom.xml, а не к версиям scm.
Если значение равно false, оно сохранит ту же версию, что и помеченный выпуск;
если true, он запросит версию, по умолчанию сделав снимок помеченного выпуска, который может быть, а может и не быть тем, что вы хотите.

См. Также эту тему :

Сначала вам нужно начать с рабочей копии, извлеченной из тега .
Если тег был создан плагином релиза, начальный URL-адрес scm должен быть правильным и указывать обратно на тег.

Затем с помощью плагина создайте ветку и переключите рабочую копию на ветку.

Альтернатива - вручную:

  • скопировать из тега в новую ветку
  • переключить рабочую копию на новую ветку (или проверить рабочую копию из новой ветви)
  • обновить pom для использования URL-адреса новой ветки - зафиксировать обновление для pom
2 голосов
/ 03 мая 2012
mvn release:branch
   -DbranchName=${project.artifactId}_${project.version} 
   -Dusername=${username} 
   -Dpassword=${passwd} 
   -DupdateBranchVersions=true 
   -DupdateVersionsToSnapshot=true 
   -DremoteTagging=false 
   -DsuppressCommitBeforeBranch=true 
   -DupdateWorkingCopyVersions=false

-DautoVersionSubmodules = true

При запуске Maven запросит версию для использования в ветви.Я предоставил 1.5.0-azuresupport-SNAPSHOT.Поскольку для autoVersionSubmodules установлено значение true, Maven Release будет автоматически использовать эти версии для всех подмодулей и, следовательно, также обновит все внутренние зависимости проекта до этой версии.

-DsuppressCommitBeforeBranch = true

По умолчанию Maven Releases создает промежуточные коммиты для текущей рабочей копии.Я не уверен в причине, но я думаю, что это было, потому что некоторые VCS не поддерживают ветвление / маркировку измененных рабочих копий.Этот параметр гарантирует, что в рабочую копию не будут внесены промежуточные коммиты.

-DremoteTagging = false

С SVN, по умолчанию, тегисозданы удаленно.Если вы хотите пропустить промежуточные коммиты, это должно быть установлено в false.

-DupdateBranchVersions = true

-DupdateWorkingCopyVersions = false

При ветвлении вы можете либо определить новые версии для текущей рабочей копии, либо новую ветвь, либо и то и другое.Как установлено здесь, рабочая копия останется одна, и плагин запросит новую версию для ветви.

здесь у вас есть все объясненные аргументы -D http://startbigthinksmall.wordpress.com/2011/11/29/create-branches-with-maven-release-plugin-svn/

0 голосов
/ 18 октября 2011

Фактическая проблема в том, что цель release:branch фиксируется в тегах, что является недобросовестной ошибкой .Обходного пути нет.Ваш хук перед фиксацией, вероятно, не работает, потому что он спроектирован - возможно, правильно - для предотвращения коммитов внутри каталога тегов.

0 голосов
/ 15 июля 2010

Команды, которые вы запускаете, выглядят хорошо и строго следуют примеру, приведенному в Создание ветви :

По умолчанию POM в новой ветке сохраняет ту же версию, что и местный рабочая копия, а локальный POM увеличено до следующей ревизии. Если Вы хотите обновить версии в новом ветка а не в рабочей копии, бежать:

mvn release:branch -DbranchName=my-branch -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false

Примечание: Это может быть полезно, если вы хотите создать ветку из тега

Однако, похоже, это хук 'pre-commit' , который терпит неудачу и жалуется. Вот мне и интересно:

  • что вы делаете в этом хуке
  • что произойдет, если вы временно отключите этот хук
...