与Magento一起使用Git的最佳实践?

与Magento一起使用Git的最佳实践?,git,magento,git-submodules,git-subtree,Git,Magento,Git Submodules,Git Subtree,我正在研究如何在与供应商库(在本例中是Magento)集成的同时,在我自己的定制代码回购协议中实现最佳工作。在我的情况下,我将不需要向供应商提供补丁(尽管这将是一个巨大的附带好处) 我已经研究了git子模块和git子树。我认为git子模块不能满足我的需要。Magento具有以下类型的树结构: /app /code /community * /core /local * /design /adminhtml /frontend

我正在研究如何在与供应商库(在本例中是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中提取)上应用回购。我不愿意继续讨论这个问题,因为我觉得拥有供应商的日志信息(从中提取)将非常有助于对新更新进行排序,并找出影响我的更改。

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

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

  • 避免修补供应商代码
  • 如果你不能。在做补丁之前,考虑将您的更改打包为自定义的MaMto to模块,并将其放入App/Cudio/Studio中。
  • 如果您的修改涉及PHP代码:

  • 您可以从OOP中获益,并将对特定方法的更改最小化。扩展相应的类
  • 使用config.xml中的Magento配置机制覆盖相应的类
  • 如果无法实现上一步-将您的更改(补丁类)放入app/code/local,即include_路径顺序更高,以便有效地使用您的代码而不是供应商的代码
  • 如果您的修改涉及phtml模板->使用Magento布局机制将供应商的phtml替换为您的phtml。正确的设计定制无论如何都需要大量的修改活动和布局工作


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

    您提到的那些方法中没有一种对我真正有效

    目前,我正在使用以下.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;
    
    我考虑的另一个想法是尝试一个供应商分支模型,但我担心这会增加额外的麻烦,尤其是在一些大型依赖树的情况下,即为了真正的效率,它必须集成在pear级别,即每个下载的模块必须自动分支,因此,目前看来,只使用付费扩展似乎不错

    我曾试图在magento论坛上提起这个话题,但也没有得到任何回复:

    更新: -值得一看

    成为PHP的标准依赖关系管理工具,因此,在项目中使用它将获得更多优势

    您不需要将扩展、主题、lib提交或分支到项目树中,但始终具有适当的版本和依赖项


    谢谢。

    我想你在谈论不同的事情

    邱亨的建议是完全正确的。您可以在git中完成所有这些,并且不需要子模块或子树

    我的.gitignore文件和您的差不多,所以看起来不错

    我在这里写了一篇关于我们如何使用git作为管理magento商店的团队的文章,也许它会对您有用:

    类似棉被的工作流 这正是以前用棉被做的,现在用(在Git上),(在Hg上)或(在Bazaar上)做的

    这样做的目的是维护一系列相互堆叠的修补程序,这些修补程序适用于SCM控制的文件版本(可能还会创建新文件,这对您来说也是如此)。在任何时候,您都可以完全弹出堆栈,更新上游代码,然后逐个重新打包所有补丁。如果它们都干净地应用,则会自动完成,如果没有,则在第一个出现故障的修补程序处停止该过程

    纯吉特 以下内容认为您正在克隆Magento Git回购。如果他们不使用Git,您仍然可以首先将他们的历史转换为Git,例如使用

    重基 Git使得从一个不同的起点重新应用历史的一部分变得很容易。因此,您也可以只克隆Magento,使用代码,在更新Magento时,从上一个clean Magento版本开始执行,然后在新的clean Magento版本上重新调整工作

    基本上,您可以使用普通的Git工具来遵循Cutter的工作流

    分支机构
    另一种方法是简单地使用分支。你克隆了Magento的回购协议,从中分支,做你自己的事情,当你获取Magento的最新版本时,你合并了这两个分支。只是,考虑到你是一个Magento开发人员,在一个功能分支上工作,而这个分支永远不会进入主分支…

    我认为你可以使用modgit工具来实现这一点:
    您可以使用modgit clone命令克隆一些Magento模块。这里有一个完整的示例:

    这里有一篇关于完美Magento/git工作流的有用博客文章:Sweet。那个