3

我正在尝试将我们的存储库从 SVN 迁移到 Git,但我在一个非常大的项目中遇到了发布插件的问题。

问题:

这个项目有大约 50 多个子模块,它尝试将所有修改过的 pom 添加为一个 'git add --'。这打破了 Windows 命令行限制。

幸运的是,在 maven-scm-provider-gitexe 的 1.8.1 版本中对此进行了修复,但是 maven-release-plugin 当前设置为使用没有修复的 1.7。

我尝试将以下内容添加到我的根 pom.xml,但我仍然可以看到它在 mvn release:prepare 期间下载 1.7,甚至在详细模式下运行该进程也没有表明它正在使用 1.8.1。

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <executions>
      <execution>
        <id>default</id>
        <goals>
          <goal>perform</goal>
        </goals>
        <configuration>
          <pomFileName>subproj/pom.xml</pomFileName>
        </configuration>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>org.apache.maven.scm</groupId>
        <artifactId>maven-scm-api</artifactId>
        <version>1.8.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven.scm</groupId>
        <artifactId>maven-scm-provider-gitexe</artifactId>
        <version>1.8.1</version>
      </dependency>
    </dependencies>
  </plugin>

我还尝试将以下内容添加到 pom.xml 中,以防它强制使用正确的版本而没有更多的运气。

<extensions>
    <extension>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-provider-gitexe</artifactId>
      <version>1.8.1</version>
    </extension>
</extensions>    

我怀疑它没有使用 1.8.1 的原因是它仍然无法尝试对所有 pom 文件进行 git add 操作,而我已经检查了插件源代码,它肯定看起来应该为 Windows 单独添加每个文件(我甚至仔细检查了 codehaus plexus Os.isFamily(Os.FAMILY_WINDOWS) 以确保在我的机器上返回 true。

我错过了什么?如何强制发布插件使用正确版本的 scm 插件?

4

3 回答 3

4

根据 maven 发布插件 2.4.1 更改日志http://jira.codehaus.org/secure/ReleaseNote.jspa?projectId=11144&version=19050,由于 'git status - 的错误,SCM 在此版本中已回退到 1.7 -瓷'。

  • 所以你应该试试2.4版本。它应该可以工作,也许你不会受到这个错误的影响。
  • 或者等待未来的版本......

编辑:该错误与此 SCM 错误有关:http: //jira.codehaus.org/browse/SCM-686

评论说使用maven-scm-provider-gitexeANDmaven-scm-provider-git-commons作为依赖项

<dependencies>
    <dependency>
      <groupId>org.apache.maven.scm</groupId>
      <artifactId>maven-scm-provider-gitexe</artifactId>
      <version>1.8.1</version>
    </dependency>
   <dependency>
    <groupId>org.apache.maven.scm</groupId>
    <artifactId>maven-scm-provider-git-commons</artifactId>
    <version>1.8.1</version>
   </dependency>       
</dependencies>
于 2013-07-03T14:24:30.710 回答
1

愚蠢的问题,但是,您是否考虑过将所有这些子模块移动到他们自己的 git 项目中?并分别释放?

于 2013-07-03T11:58:13.693 回答
0

按照 Aurelien 的建议,将子项目提取到单独的模块中。遵循这一原则将使您的生活更简单。您不必为了发布而发布没有更改的模块。此外,构建时间将被缩短。如果您查看托管在 Github 上的大多数 Java 项目,您会发现很多人已经将他们的每个模块提取到单独的项目中。Git 主要用于处理较小的存储库。

您可以像这样提取子目录的历史记录:

git remote rm origin
git filter-branch --subdirectory-filter ${project} HEAD
git remote add origin git@foo.com:path/to/${project}.git
git branch --set-upstream master origin/master
git push

我相信,这不是您正在寻找的答案之王,但我认为这可以帮助您走上正确的道路,并且,如果您不像这样移动所有项目,至少,它会缩短您的列表,并且,也许可以帮助您解决问题。

于 2013-07-03T14:47:11.827 回答