¿Cómo hago una twig desde una label SVN con Maven?

Supongamos que he labeldo la versión de lanzamiento de nuestro proyecto bajo $SVNROOT/project/tags/1.0 . Supongamos ahora que necesito crear una twig a partir de esa label, márquela como SNAPSHOT y actualice la configuration de scm .

Intenté con el release:prepare objective así:

 $ 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 

Pero esto falla, con un post de error que me advierte que no tengo derechos de confirmación en la $SVNROOT/project/tags/1.0 project-1.0 (que es perfectamente cierto, no permitimos commits en las tags).

¿Qué estoy haciendo mal aquí, y por qué Maven estaba tratando de cometer algo en la label?

Actualizar

Solo para aclarar: estoy ejecutando esto desde el directory en el que he revisado la label. El error exacto que obtengo es el siguiente:

 [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.shanetworking.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.shanetworking.release.phase.ScmCommitPhase.checkin(ScmCommitPhase.java:133) at org.apache.maven.shanetworking.release.phase.ScmCommitPhase.execute(ScmCommitPhase.java:109) at org.apache.maven.shanetworking.release.DefaultReleaseManager.branch(DefaultReleaseManager.java:379) at org.apache.maven.shanetworking.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. 

¿Dónde ejecutaste ese command mvn release:branch ?

Como se menciona en este hilo :

Lo que el complemento doco especifica es que el objective release:branch debe invocarse desde una location de pago con la revision/tag que desea realizar la bifurcación . (es decir, tags/<my_release_version> ).

Utilicé la siguiente command-line para crear una twig de mantenimiento ( branches/myapp-1.3.1 ) desde una location de label existente ( tags/myapp-1.3 ):

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

El -DupdateBranchVersions pertenece a las versiones en pom.xml , no a las versiones de scm.
Si es falso, conservará la misma versión que la versión labelda;
si es verdadero, solicitará una versión, que de forma pnetworkingeterminada será una instantánea de la publicación labelda, que puede ser o no lo que usted desea.

Ver también este hilo :

Primero, debe comenzar con una copy de trabajo desprotegida de la label .
Si la label fue creada por el complemento de publicación, la URL de inicio de scm debe ser correcta y volver a la label.

Luego use el complemento para organizar la bifurcación y cambie la copy de trabajo a la sucursal.

Una alternativa es manualmente:

  • copyr de la label a una nueva twig
  • cambie la copy de trabajo a la nueva twig (o revise una copy de trabajo de la nueva twig)
  • Actualiza el pom para usar la nueva URL de la sucursal. Confirma la actualización del pom.
 mvn release:branch -DbranchName=${project.artifactId}_${project.version} -Dusername=${username} -Dpassword=${passwd} -DupdateBranchVersions=true -DupdateVersionsToSnapshot=true -DremoteTagging=false -DsuppressCommitBeforeBranch=true -DupdateWorkingCopyVersions=false 

-DautoVersionSubmodules = true

Cuando se ejecuta, Maven solicitará la versión que se utilizará en la sucursal. Proporcioné 1.5.0-azuresupport-SNAPSHOT. Como autoVersionSubmodules se establece en verdadero, Maven Release utilizará automáticamente estas versiones para todos los submodules y, por lo tanto, también actualizará todas las dependencies del proyecto interno a esa versión.

-DsuppressCommitBeforeBranch = true

Por defecto, Maven Releases crea compromisos intermedios para la copy de trabajo actual. No estoy seguro de la razón, pero creo que fue porque algunos VCS no admiten la ramificación / labeldo de copys de trabajo modificadas. Este parámetro se asegura de que no se realicen confirmaciones intermedias en la copy de trabajo.

-DremoteTagging = falso

Con SVN, de forma pnetworkingeterminada, las tags se crean de forma remota. Si desea omitir compromisos intermedios, esto debe establecerse en falso.

-DupdateBranchVersions = true

-DupdateWorkingCopyVersions = falso

Cuando se bifurca, puede definir nuevas versiones para la copy de trabajo actual, o la nueva, o ambas. Como se establece aquí, la copy de trabajo se dejará en paz y el complemento pedirá una nueva versión para la sucursal.

Aquí tienes todos los arguments -D explicados en http://startbigthinksmall.wordpress.com/2011/11/29/create-branches-with-maven-release-plugin-svn/

Los commands que está ejecutando se ven bien y siguen estrictamente el ejemplo dado en Crear una sucursal :

Por defecto, el POM en la nueva twig mantiene la misma versión que la copy de trabajo local, y el POM local se incrementa a la siguiente revisión. Si desea actualizar versiones en la nueva twig y no en la copy de trabajo, ejecute:

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

Nota: Esto puede ser útil si desea crear una twig a partir de una label

Sin embargo, parece que es un gancho de "precompromiso" que está fallando y quejándose. Entonces me pregunto:

  • lo que estás haciendo en este enganche
  • que pasa si deshabilitas este gancho temporalmente

El problema real es que el objective de release:branch compromete con las tags, lo cual es un error desmesurado . No hay solución. Es probable que su enlace precompromiso falle porque está diseñado, probablemente correctamente, para evitar confirmaciones dentro de un directory de tags.