带有git工作流包的Laravel应用程序

带有git工作流包的Laravel应用程序,git,laravel,Git,Laravel,因此,我有了一个新的GitHub存储库,我的Laravel应用程序就生活在其中 安装好了,工作正常 我希望为应用程序创建一个包(并计划在其他项目中使用它),因此我使用artisan创建了一个工作台 我还为该包添加了另一个GitHub存储库 我已经将/workbench添加到.gitignore中,这样我的包开发就不会致力于Laravel应用程序回购 我的问题是,我如何设置git,使workbench中的包只被我为包设置的repo跟踪?似乎经过更多的研究,我的答案是 这是一个答案很大的问题。简而言

因此,我有了一个新的GitHub存储库,我的Laravel应用程序就生活在其中

安装好了,工作正常

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

我还为该包添加了另一个GitHub存储库

我已经将
/workbench
添加到
.gitignore
中,这样我的包开发就不会致力于Laravel应用程序回购


我的问题是,我如何设置git,使workbench中的包只被我为包设置的repo跟踪?

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

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

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

同时,这也让团队合作变得更加困难——在composer中使用开发包比将git repo克隆到workbench中更明智(尽管我想不一定更容易)。我想这可能是子模块为您工作的情况。也就是说,我过去一直被子模块刺痛,拒绝再靠近它们,但也许我在那里是不理智的

因此,我的解决方案是:

  • 以artisan的方式制作一个新的工作台包,以便进行设置
  • 确保composer.json正常,然后提交并将其推送到某个位置
  • 删除工作台文件夹
  • 将新推送的工作台包添加到主应用程序的composer.json中,但请确保使用开发版本(例如dev master的版本约束)-这将使composer下载完整的存储库,而不仅仅是绝对必要的文件
  • 现在,您可以直接在
    供应商
    目录中对软件包进行开发
  • 要点/注意事项:

    • 您必须使用基于PSR的自动加载,因为我不认为composer dump autoload会考虑
      供应商中的软件包,除非第一次安装或更新时使用
      composer update
      ,尽管我不是100%这样认为。尽管如此,使用PSR自动加载还是很好的
    • 您可以对文件进行更改,而无需提交和执行composer更新或其他任何操作—它只会按照您的预期使用您的文件
    • 但是如果更改composer.json文件,则必须提交、推送并执行
      composer更新,因为composer无法识别这些更改。这可能是对依赖项的更改、自动加载规则或任何您需要依赖于应用程序的其他内容
    团队合作的好处是每个人都能做到
    composer require vendor/package dev master
    将在他们的
    vendor/vendor/package/
    目录中为他们获取一个git存储库



    这一切都是基于我的个人经验。工作台和/或子模块应该没有问题,但我在过去两者都有问题,所以我放弃了它们。我真的认为没有一种正确的方法可以做到这一点。

    或者您可以使用子模块。我的意思是这个“很长的答案”是正确的答案吗?似乎我们正在试图说服自己,艰难的道路仍然是合理的。@TimOgilvy是的,这只是我在Laravel 4.2中开发包(特别是相互依赖的包,尽管不是循环的)的个人经验。我已经从PHP/Laravel迁移到这里,所以这里的情况很可能已经改变了。事实上,我更多的是解决使用工作台本身的潜在问题,而不是如何跟踪这些工作台文件的具体问题。我之所以写这个答案,是因为我对工作台问题的“解决方案”实际上也是对手头问题的解决方案——在开发模式中使用单独的回购协议。