所以我有一个新的GitHub存储库,我的Laravel应用程序存在于其中。
设置好并且工作正常。
我希望为应用程序创建一个包(并计划在其他项目中使用它),因此我使用工匠创建了一个工作台。
我还为所述包添加了另一个GitHub存储库。
我已将/workbench
添加到.gitignore
,以便我的包开发不会提交给Laravel应用程序存储库。
我的问题是,如何设置git以便工作台中的软件包仅由我为软件包设置的repo进行跟踪?
答案 0 :(得分:10)
这是一个有很大答案的问题。简而言之,您不需要子模块。只需导航到workbench
中的包目录并执行git init
,即在那里设置一个git存储库,用于搞乱代码和推送。如果workbench
位于您的主应用.gitignore
中,则两者不应相互接触。
然而,我发现在工作台内开发某些功能并不是很好。首先,当您的应用处于“工作台”模式时,设置与正常情况略有不同。您可能没有注意到这一点,但一个很大的区别是您的软件包依赖其composer.json
的任何软件包实际上覆盖了您的主应用程序包。在同一个工作台应用程序中开发两个包(其中一个依赖于另一个包)时,我学到了这种令人困惑和困难的方法。第二个包依赖的包实际上并没有被执行,因为Laravel在第二个类的vendor
目录中看到了它的文件。非常奇怪,很难调试。无论如何,你不太可能遇到那个确切的问题,但它只是表明当你使用工作台时,Laravel处于不同的“模式”。
此外,它使团队合作更加困难 - 在作曲家中使用开发包而不是将git repo克隆到工作台中更有意义(尽管我猜不一定更容易)。我想这个可能是子模块适合你的情况。那说我过去曾被子模块蜇过,拒绝再靠近他们,但也许我在那里不合理!
所以我的解决方案就是这样做:
vendor
目录积分/注意事项:
vendor
中的软件包,除非首次安装或使用composer update
进行更新,但我不是100%就是这样。仍然,使用PSR自动加载,这一切都很好。composer update
,因为composer将无法识别这些更改。这可能是对依赖项,自动加载规则或您需要依赖应用程序的任何其他内容的更改。团队合作的好处是每个人都可以这样做。 composer require vendor/package dev-master
将在他们的vendor/vendor/package/
目录中为他们提供一个git存储库。
这完全取决于我个人的经验。据说工作台和/或子模块没有任何问题,但过去我遇到了两个问题,所以我放弃了它们。我真的不认为有一种正确的方法可以做到这一点。
答案 1 :(得分:2)
似乎经过更多的研究,git submodules是我的答案!