当前位置: 首页 > 面试题库 >

从不寻常的svn目录结构迁移到Maven?

长孙正卿
2023-03-14
问题内容

与“普通” svn目录结构相反,我使用以下结构:

树干/
  项目1 /
  项目2 /
  项目3 /
  ...
分支机构/
  project1-分支/
    项目1 /
    项目2 /
    ...
  project2-分支/
    项目1 /
    项目2 /
    ...
标签/
  项目1 /
    V1
    V2
    ...

如您所见,对于每个项目,我没有单独的三元组(树干/分支/标签)。

为了进行开发,我对主干进行了检出(有时是稀疏检出),其中包含我需要的所有项目(项目之间存在依赖关系,有些项目只是库)。

我从中看到的好处是:

  • 更新和签入很容易,因为我对所有项目都有一个公共的根目录(trunk)。一个简单svn updatesvn commit全部完成。

  • 创建标签或分支很简单,因为这只是我要做的主干svn copy。(分支和标签实际上包含的项目超过了所需的数量,但是a svn copy便宜,如果需要,我仍然可以在分支或标签上进行稀疏签出。)

  • 将资源从一个项目转移到另一个项目很容易,因为它们都位于同一个存储库中。

  • 当我正在全面检查主干时,全局重构(例如,更改常用类的包)很容易,因为可以确保我不会错过任何项目。

  • 合并很容易,因为即使从一个项目到另一个项目进行重构,我也总是可以一次合并整个分支。

我打算迁移到Maven,并将所有项目从主干项目拆分到Maven项目。我想从Maven依赖管理和可用的插件中受益(现在我正在使用庞大的自定义ant文件)。

现在我的问题是:

  • 我是否必须更改svn目录结构,以使每个项目都有自己的三元组(trunk / branches / tags)?我猜答案是“是”。

  • 如果更改结构,那么我会失去上面提到的哪些好处(我的意思是,使用Maven进行操作会更复杂)?

  • 用maven做这些的等效方法是什么?


问题答案:

没有这样的东西,一个“普通的” svn目录结构。有在讨论不同的方法一节“规划你的版本库组织”的的
版本控制使用Subversion
的书(甚至是/trunk/tags/branches名称只是约定,有没有区别标签和分支之间,除非你对他们的看法) 。

  • 我是否必须更改svn目录结构,以使每个项目都有自己的三元组(trunk / branches / tags)?我猜答案是“是”。

不,你不 。参见例如Apache
ServiceMix源树:这是一个多模块的maven项目,但这些模块位于一个之下trunk。另一方面,XWiki
不是单一产品,而是
其源代码存储库页面中详细介绍
的产品和项目生态系统
它具有许多主干/分支/标签。您可以在此处浏览其存储库以了解布局。

但是,选择一种方法还是另一种方法,不仅取决于口味,还取决于您的发布周期(mvn release稍后再讨论)。如果您的项目中的组件共享相同的版本(即ServiceMix),那么我将仅使用一个中继。如果他们有一个独立的发布周期(例如XWiki),我将使用多个“主干/标签/分支”结构,如该线程中所述:

myrepo
  + .links (2)
    + trunks
      + pom.xml
  + parent-pom (1)
    + trunk
      + pom.xml
  + project-A
    + trunk
      + pom.xml
  + project-B
    + trunk
      + pom.xml

1)项目的父POM具有自己的发布周期。每个组件的POM都将其用作父对象(简单地使用groupId
artifactId,否引用relativePath)。对于发行版,您必须先发行父POM。

2)这是一种结构,可以轻松检出项目的特定分支,即通常是干线。一个Subversion用户检出myrepo / .links /
trunk以获得所有源的主修订版。诀窍在于,该目录包含svn:externals指向该项目所有其他模块(父pom,project-A,project-B)的主干的外部链接(即具有
属性)。此目录中的pom.xml从未发布,它仅包含用于三个模块的模块部分,以启用多模块构建。通过这种构造,您可以轻松设置分支,例如:

myrepo
  + .links
    + branch-2.x
      + pom.xml

我已经多次使用此设置,效果很好。

  • 如果更改结构,那么我会失去上面提到的哪些好处(我的意思是,使用Maven进行操作会更复杂)?

让我一一回答。

  • 借助svn externals,更新和签入都很容易。一个简单svn updatesvn commit全部完成。

  • 创建标签或分支很简单,因为maven版本插件会为您处理(标签和分支会更干净)。

  • 将资源从一个项目转移到另一个项目看起来并不复杂。

  • 全局重构(例如,更改常用类的包)很容易,因为您仍然可以对干线进行完整的检出。

  • 合并可能不太容易。但是,您真的经常将类从一个项目移动到另一个项目吗?

  • 用maven做这些的等效方法是什么?

如果需要,请使用maven版本插件和svn externals的建议布局之一。



 类似资料:
  • 迁移数据库ORM层 迁移模板Blade 迁移分页 迁移验证器 迁移Cache

  • 数据库 模板类 验证器 缓存类

  • 问题内容: 在我的新项目中,我面临着一个复杂的基础架构,其中包含多个模块,这些模块多年来以令人不快,不受控制的方式增长。 直言不讳:构建过程令人恐惧。有40多个不同的复杂Ant文件,它们被多次连接,并且SOA框架还生成了多个动态Ant文件。花了几天的时间才能真正理解所有依赖关系,并最终构建整个项目而没有任何错误。 我的计划是或打算将整个项目从Ant迁移到Maven,因为已经计划了新组件,并且我希望

  • Subversion版本库到Git版本库的转换,最好的方法就是git-svn。而git-svn的使用方法在前面“Git和SVN协同模型”一章已经详细介绍过。本章的内容将不再对git-svn的用法做过多的重复,只在这里强调一下版本库迁移时的注意事项,相关git-svn内容还请参照前面的内容。 在迁移之前要确认一个问题,Subversion转换到Git库之后,Subversion还继续使用么?意思是说

  • 迁移cache分页 仓库地址: cache 安装 composer require illuminate/cache 暂时实现 redis方式 还需安装 composer require illuminate/redis composer require predis/predis //个人比较喜欢predis 启动predis function frameInitialized() {

  • 迁移pagination分页 仓库地址: pagination 安装 composer require illuminate/pagination 我们可以用illuminate/pagination分页了 $users = User::paginate(15); //在你的模板 {!! $users->links() !!} 然后你将看到一堆莫名其妙的错误,没关系,让我们来解决它。既然不能像l