我正在努力弄清楚如何在与供应商的库集成时(在本例中为Magento)集成时,在自己的存储库中最好地工作。就我而言,我不需要向供应商推着补丁(尽管这将是一个很大的副品)。

我研究了git子模块和git子树。我认为GIT子模块不适合我的需求。 Magento具有以下类型的树结构:

/app
  /code
     /community *
     /core
     /local *
  /design
     /adminhtml
     /frontend
        /base
        /yourtheme *
/lib
  /Zend
  /Varien
  /yourlib *
/js
  /yourjs *
  /varien
  /mage

使用git子模块似乎在单独的文件夹中起作用(例如 /是您的应用程序, / /供应商 /Magento是子模块)。但是,随着这种交织的程度,子模块似乎不是一个很好的解决方案。我对此错了吗?

那让我带有git子树。但是,对于Git子树,相同的核心假设(供应商分支是名称所暗示的,子树是不正确的)。 Magento不是子树,而是我项目所适合的核心库。那是对的吗?

如果这两种git方法不起作用,我还应该知道其他一种方法会做我想完成的工作吗?

我不愿意追求的最终选择是拥有一份回购,然后我只是对最新的供应商更改(从Tarball中取出)申请。我不愿意追求这一点,因为我觉得拥有供应商的日志信息(从 https://github.com/magentomirror/magento-mirror)对分类新更新并弄清楚哪些变化对我有很大帮助。

有帮助吗?

解决方案

我认为您可以使用Modgit工具为此: https://github.com/jreinke/modgit您将能够使用Modgit Clone命令克隆一些Magento模块。这里有一个完整的示例: http://www.bubblecode.net/en/2012/02/06/install-magento-modules-with-modgit/

其他提示

您提到的那些方法中的不对我来说确实有用...

目前我正在使用 要安装和管理核心和社区模块的升级,并使用以下.gitignore文件将整个Magento结构投入GIT存储库:

# Dynamic data that doesn't need to be in the repo
/var/*
/media/*
/downloader/pearlib/cache/*
/downloader/pearlib/download/*
/app/etc/use_cache.ser
local.xml

并使用以下shell命令保留空目录:

for i in $(find . -type d -regex ``./[^.].*'' -empty); do touch $i"/.gitignore"; done;

我想到的另一个想法是尝试一个供应商的分支模型,但恐怕它会增加额外的头痛下载的模块必须自动分支,因此,现在仅与付费扩展名一起使用似乎很不错。

我试图在Magento论坛上解雇该主题,但也没有得到任何答复:http://www.magentocommerce.com/boards/viewthread/78976/

更新:

Magento Composer安装程序 - 值得看。

作曲家 成为PHP的标准依赖管理工具,因此,您将在项目中获得更多优势。

您不需要提交也不需要分支扩展,主题,LIB,而是始终具有适当的版本和依赖项。

谢谢。

您的问题更多地是关于Git的子模块与子树的一般。我想不出会影响比较的任何洋红色细节。很可能您知道 子树合并策略 我会推荐的,但我不确定为什么您需要首先合并。

合并的最佳实践是避免它,而Magento架构则足够灵活以允许它。遵循一个简单的规则集:

  1. 避免修补供应商代码。
  2. 如果不能。在进行补丁之前,请考虑将更改包装到自定义的Magento模块中,然后将其放入应用程序/代码/本地。

如果您的修改涉及PHP代码:

  1. 您可以从OOP中受益,并最大程度地减少对某种方法的更改。扩展各自的类。
  2. 使用Config.xml中的Magento配置机制覆盖各个类。
  3. 如果无法实现上一个,则将更改(修补的类)放入应用程序/代码/本地,即Incluest_Path Order中更高,以便有效地使用代码而不是供应商的代码。

如果您的修改涉及PHTML模板 - >使用Magento布局机制将供应商的PHTML与您的phtml替换。正确的设计定制将需要大量的修改活动和布局工作。

如果您的修改涉及JS->再次使用布局将放置在JS或皮肤文件夹中的代码链接。

我认为您在谈论不同的事情。

Yauhen的建议是完全正确的。您可以在git中完成所有这些操作,也不需要子模型或子树。

我的.gitignore文件与您大致相同,所以看起来不错。

我写了一篇文章,说明我们如何将Git用作团队在这里管理Magento商店,也许对您有用:

洋红色部署的最佳实践

类似被子的工作流程

这正是以前用被子所做的 堆叠的git (在git之上), 汞队列 (在HG之上)或 织机 (在集市上)。

这个想法是要维护一系列彼此堆叠的补丁程序,该补丁适用于SCM版本的文件(可能还可能创建新文件,这是您的情况)。在任何时候,您都可以完全弹出堆栈,更新上游代码,然后逐一重新添加所有补丁程序。如果它们都干净地涂抹,则自动完成,如果不是,则该过程在第一个故障补丁下停止。

纯git

以下考虑您是在克隆Magento Git Repo。如果他们不使用git,您仍然可以首先将其历史记录转换为git,例如 裁缝.

重新观察

git可以轻松地从不同的起点重新应用历史的一部分 重新打击. 。因此,您也可以只需克隆Magento,使用代码,然后在更新Magento时,从最后一个干净的Magento修订版中进行操作,然后在新的Clean Magento修订版中重新使用您的工作。

您基本上使用普通的git工具遵循被子的工作流程。

分支

这样做的另一种方法是简单地使用分支。您将Magento的仓库从中分支,做您的事情,当您获取Magento的最新修订时,您将两个分支合并。只是 典型的DVCS工作流程, ,考虑到您是在功能分支上工作的Magento Exphineper,它永远不会到达主要分支……

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top