【问题标题】:Using git and submodule, what's a good folder structure?使用 git 和子模块,什么是好的文件夹结构?
【发布时间】:2011-07-24 14:44:15
【问题描述】:

我将 git 与子模块一起使用,但我很难弄清楚如何组织我的文件。 我用 PHP 开发,并使用单元测试。所以现在,我为每个模块使用这个组织:

  • src/
  • 测试/

这似乎是一个绝妙的主意,但问题是当我对项目执行“git submodule add”时,我将拥有这条路径: 项目/模块/新闻/src/index.php

src/文件夹真的有问题。

我应该简单地将我的所有文件放在模块根目录中,并在源代码中混合一个测试/文件夹吗?对我来说这听起来很糟糕。你在做什么?

编辑:src/ 文件夹由于自动加载而存在问题。我不应该将“src”放在我所有的班级名称中......

【问题讨论】:

  • 关于编辑的问题:问题是您希望类名与文件夹结构匹配。 Ofc 每个模块也应该有它自己的测试,这是一个问题,因为你不能在 git 子模块中包含(比如 BarModule/src => module/Bar)? (只是检查我是否获得了您的要求权利)

标签: php git phpunit project-organization


【解决方案1】:

当我遇到这个问题时,我所做的是创建一个名为vendors 的文件夹并将所有子模块放入其中。然后我使用相对路径将目录符号链接到我想要它们在我的代码中的位置。您可以将符号链接提交到 git,当其他人拉存储库时它们仍然可以工作。当然,这仅在您使用基于 *nix 的操作系统时才有效。

例如:

modules/
vendor/module1/src/

可以像这样进行符号链接(来自模块目录):

ln -s ../vendor/module1/src module1

不确定这是否能解决您的问题。

【讨论】:

  • 某些版本的 Windows 有符号链接之类的东西,你可以试试。我不在 Windows 上开发,所以我从未尝试过。
【解决方案2】:

我不会在单独的模块中进行测试。将其保存在同一个存储库中。

【讨论】:

  • 我从来没有打算将我的测试放在不同的存储库中。所有模块都与自己的测试捆绑在一起。
【解决方案3】:

只要自动加载器能以某种方式找到您的文件,您的文件夹布局就几乎无关紧要。如果您使用 PEAR 约定将类名映射到其源文件,则可以将 src 目录添加到包含路径或堆叠第二个自动加载器。然后您不必将 src 添加到类名中。

PEAR 约定的替代方案是在文件和类之间使用静态映射。有a tool that can automatically generate such an autoloader for you at GitHub

PHP Project Wizard 中也使用了静态自动加载器方法。该工具将创建 src 和测试文件夹,包括 your phpunit configbuild file to connect your project with Jenkins CI。这是一个方便的包。

至于包含子模块,请考虑将它们放入 lib 或 ext 文件夹。在phpdox project at GitHub 中可以找到有关外观的示例。确保您还查看main bootstrap file 以了解如何包含各种自动加载器。

【讨论】:

  • 你是对的,除了我可以在一个项目中拥有 30 多个模块。所以我会堆叠 30 多个自动装载机,这不是很糟糕吗?我已经知道(并合作过)phpdox 项目;)但这不是同一种子模块。在我的情况下,子模块将更像是一个 wordpress 插件。这个项目也必须是 php 5.2 :(
  • @FMaz008 你为什么不直接使用 TheSeer 的 PHPAB 并让它遍历整个项目,包括你的 30 个子模块,然后使用单个自动加载器呢? IIRC PHPAB 也有 5.2 的模板,所以版本应该不是问题。
猜你喜欢
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 2020-04-12
相关资源
最近更新 更多