2010-07-14 107 views
3

假設我在$SVNROOT/project/tags/1.0下標記了我們項目的發佈版本。現在假設我需要從該標記創建一個分支,將其標記爲SNAPSHOT,並更新scm配置。如何使用Maven從SVN標籤創建分支?

我試圖與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. 
+0

可用於通過Maven的過程是一個不同的用戶,以獲得問題的svn「'tags'」文件夾? – VonC 2010-07-14 14:23:52

回答

4

你在哪裏執行該命令mvn release:branch

由於mentioned in this thread

什麼插件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,它會提示輸入一個版本,默認爲標籤發佈的快照,這可能是也可能不是你想要的。

this thread參見:

首先,你需要開始一個工作副本從標籤簽出。
如果標籤是由發佈插件創建的,則開始的scm url應該是正確的,並指向標籤。

然後使用該插件來創建分支並將工作副本切換到分支。

另一種方法是手動:

  • 從標籤複製到一個新的分支
  • 開關工作拷貝到新的分支(或簽出從新的支路的工作副本)
  • 更新POM,以使用新分支的網址 - 提交更新到POM
+0

我已更新該問題以考慮您的答案。 – lindelof 2010-07-14 13:26:09

0

你正在運行的命令看起來不錯,並嚴格按照例如,在Create a Branch給出:

默認情況下,在新的分支 的POM保持相同的版本作爲本地 工作拷貝,和當地的POM是 遞增到下一個版本。如果 要更新新 分支版本,而不是在工作副本, 運行:

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

注:如果你想 從標籤創建一個分支這可能是有用

但是,它似乎是'pre-commit'掛鉤這是失敗和抱怨。所以我想:

  • 你在這個鉤子
  • 如果禁用此鉤會發生什麼做什麼暫時
0

實際的問題是,release:branch目標承諾的標籤,這是一個unconscionable bug。沒有解決方法。你的預提交鉤子可能會失敗,因爲它的設計(可能是正確的)是爲了防止在一個標籤目錄內提交。

2
mvn release:branch 
    -DbranchName=${project.artifactId}_${project.version} 
    -Dusername=${username} 
    -Dpassword=${passwd} 
    -DupdateBranchVersions=true 
    -DupdateVersionsToSnapshot=true 
    -DremoteTagging=false 
    -DsuppressCommitBeforeBranch=true 
    -DupdateWorkingCopyVersions=false 

-DautoVersionSubmodules =真

當然,Maven會提示向分支中使用的版本。我提供了1.5.0-azuresupport-SNAPSHOT。由於autoVersionSubmodules設置爲true,Maven Release將自動爲所有子模塊使用此版本,因此也將所有內部項目依賴項更新爲該版本。

-DsuppressCommitBeforeBranch =真

默認情況下,Maven的發佈創建中間提交到當前工作的副本。我不確定原因,但我認爲這是因爲某些VCS不支持修改後的工作副本的分支/標記。該參數確保沒有對工作副本進行中間提交。

-DremoteTagging =假

隨着SVN,默認情況下,被遠程創建標籤。如果您想省略中間提交,則必須將其設置爲false。

-DupdateBranchVersions =真

-DupdateWorkingCopyVersions =假

轉移時,您可以定義當前工作的副本,或者新的分支,或兩者的新版本。如此處所設置的,工作副本將被單獨保留,並且插件將要求分支的新版本。

這裏你所有的-D參數解釋 http://startbigthinksmall.wordpress.com/2011/11/29/create-branches-with-maven-release-plugin-svn/