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

dav*_*105 5 git laravel

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

设置好了,工作正常.

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

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

我已添加/workbench,.gitignore以便我的包开发不会被提交到Laravel应用程序仓库.

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

ale*_*ell 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目录中开发包

点/注意事项:

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

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


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