【问题标题】:Laravel app with package git workflow带有打包 git 工作流的 Laravel 应用程序
【发布时间】:2014-08-05 16:28:52
【问题描述】:

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

设置好了,工作正常。

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

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

我已将 /workbench 添加到 .gitignore,这样我的包开发就不会提交给 Laravel 应用程序仓库。

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

【问题讨论】:

    标签: git laravel


    【解决方案1】:

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

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

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

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

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

    要点/注意事项:

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

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


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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 2017-06-09
      • 2016-10-07
      相关资源
      最近更新 更多