Laravel应用程序与包git工作流程

时间:2014-02-13 13:11:12

标签: git laravel

所以我有一个新的GitHub存储库,我的Laravel应用程序存在于其中。

设置好并且工作正常。

我希望为应用程序创建一个包(并计划在其他项目中使用它),因此我使用工匠创建了一个工作台。

我还为所述包添加了另一个GitHub存储库。

我已将/workbench添加到.gitignore,以便我的包开发不会提交给Laravel应用程序存储库。

我的问题是,如何设置git以便工作台中的软件包仅由我为软件包设置的repo进行跟踪?

2 个答案:

答案 0 :(得分:10)

这是一个有很大答案的问题。简而言之,您不需要子模块。只需导航到workbench中的包目录并执行git init,即在那里设置一个git存储库,用于搞乱代码和推送。如果workbench位于您的主应用.gitignore中,则两者不应相互接触。

然而,我发现在工作台内开发某些功能并不是很好。首先,当您的应用处于“工作台”模式时,设置与正常情况略有不同。您可能没有注意到这一点,但一个很大的区别是您的软件包依赖其composer.json的任何软件包实际上覆盖了您的主应用程序包。在同一个工作台应用程序中开发两个包(其中一个依赖于另一个包)时,我学到了这种令人困惑和困难的方法。第二个包依赖的包实际上并没有被执行,因为Laravel在第二个类的vendor目录中看到了它的文件。非常奇怪,很难调试。无论如何,你不太可能遇到那个确切的问题,但它只是表明当你使用工作台时,Laravel处于不同的“模式”。

此外,它使团队合作更加困难 - 在作曲家中使用开发包而不是将git repo克隆到工作台中更有意义(尽管我猜不一定更容易)。我想这个可能是子模块适合你的情况。那说我过去曾被子模块蜇过,拒绝再靠近他们,但也许我在那里不合理!

所以我的解决方案就是这样做:

  1. 创建一个新的工作台包,只需设置工具
  2. 确保composer.json正常并提交并将其推送到某个地方
  3. 删除工作台文件夹
  4. 将新推送的工作台包添加到主应用程序的composer.json中,但确保使用开发版本(例如dev-master的版本约束) - 这使得composer下载完整的存储库而不仅仅是绝对存储库必要的文件
  5. 现在,您可以直接在vendor目录
  6. 上开发包

    积分/注意事项:

    • 您必须使用基于PSR的自动加载,因为我认为composer dump-autoload不会考虑vendor中的软件包,除非首次安装或使用composer update进行更新,但我不是100%就是这样。仍然,使用PSR自动加载,这一切都很好。
    • 您可以对文件进行更改,而无需提交和进行作曲家更新或任何操作 - 它只会按照您的预期使用您的文件。
    • 但是,如果您更改了composer.json文件,则必须提交,推送然后执行composer update,因为composer将无法识别这些更改。这可能是对依赖项,自动加载规则或您需要依赖应用程序的任何其他内容的更改。

    团队合作的好处是每个人都可以这样做。 composer require vendor/package dev-master将在他们的vendor/vendor/package/目录中为他们提供一个git存储库。


    这完全取决于我个人的经验。据说工作台和/或子模块没有任何问题,但过去我遇到了两个问题,所以我放弃了它们。我真的不认为有一种正确的方法可以做到这一点。

答案 1 :(得分:2)

似乎经过更多的研究,git submodules是我的答案!