Domanda

sto lavorando a capire come miglior lavoro all'interno della mia repo per il codice personalizzato, mentre l'integrazione con la libreria di un fornitore (in questo caso Magento). Nel mio caso, non avrò bisogno di spingere verso l'alto le patch al fornitore (anche se sarebbe un grande vantaggio collaterale).

Ho guardato nel modulo git e sotto-albero git. Non credo modulo git lavorerà per quello che mi serve. Magento ha il seguente tipo di struttura ad albero:

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

Utilizzando git modulo sembra funzionare meglio in cartelle separate (per esempio / è la vostra app e / vendor / Magento è il modulo). Tuttavia, con questo grado di intreccio, un modulo non sembra una buona soluzione. Mi sbaglio su questo?

che mi lascia con sottostruttura git. Ma con sottostruttura git, lo stesso assunto centrale (che il ramo venditore è, come implica il nome, un sottoalbero) non vale. Magento non è una sottostruttura, ma la libreria di base che i miei si adatta all'interno del progetto. E 'corretto?

Se questi due metodi di git non funzionano, ci sono altri quelli che dovrei sapere che avrebbe fatto quello che sto cercando di realizzare?

L'ultima opzione sono riluttante a perseguire sta avendo un pronti contro termine che ho poi basta applicare nel corso degli ultimi cambiamenti del fornitore (tirati in da un tarball). Sono riluttante a perseguire questo perché sento che avere le informazioni di log del fornitore (tirato da https: // GitHub .com / magentomirror / magentomirror ) sarebbe molto utile per l'ordinamento attraverso nuovi aggiornamenti e capire quali cambiamenti mi hanno colpito.

È stato utile?

Soluzione

Penso che si possa utilizzare lo strumento modgit per questo: https://github.com/jreinke/modgit Sarete in grado di clonare alcuni moduli di Magento con comando modgit clone. Un esempio completo è disponibile qui: http: / /www.bubblecode.net/en/2012/02/06/install-magento-modules-with-modgit/

Altri suggerimenti

Non di quei metodi che menzione davvero lavorato per me ...

Al momento sto utilizzando pera da installare e gestire gli aggiornamenti di core e moduli di comunità, e commettendo intera struttura Magento nel repository git con il seguente .gitignore file:

# 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

e utilizzando il seguente comando shell di mantenere le directory vuote:

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

Un'altra idea ho pensato che è di dare una prova di un venditore di ramificazione modello, ma ho paura che sarà aggiungere mal di testa più in particolare nel caso di alcuni grandi alberi di dipendenza, vale a dire per la reale efficacia è deve essere integrato a livello di pera , vale a dire tutti i moduli trasferito non deve essere ramificata automaticamente, quindi, per ora è sembra buono per l'uso solo con estensioni a pagamento.

Sono stato tentato di accendere il soggetto sul forum Magento, ma anche non ha ottenuto alcuna risposta: http://www.magentocommerce.com/boards/viewthread/78976/

Aggiornamento:

Magento Compositore Installer -. Vale la pena guardare

Compositore diventare strumento di gestione delle dipendenze standard per PHP, così, si otterrà molto di più vantaggi utilizzando con nella vostra progetto.

Non commettere bisogno né estensioni filiali, temi, librerie nel tuo albero del progetto, ma avere sempre le versioni corrette e le dipendenze.

Grazie.

La tua domanda è più su di git modulo vs. sottostruttura in generale. Non riesco a pensare di qualsiasi specifiche Magento che influenzeranno il confronto. Molto probabilmente siete a conoscenza di strategie sottostruttura fusione che mi raccomando, ma non sono sicuro perché avete bisogno di unire in un primo posto.

Le migliori pratiche di fusione è quello di evitarlo e l'architettura Magento è sufficientemente flessibile per permettere. Seguire un semplice set di regole:

  1. Evitare l'applicazione di patch il codice fornitore.
  2. Se non è possibile. Prima di fare una patch, prendere in considerazione l'imballaggio le modifiche in un modulo personalizzato di Magento e l'immissione in app / code / locale.

Se il codice di modifica riguarda PHP:

  1. E 'possibile beneficiare di OOP e ridurre al minimo la modifica di solo alcuni metodi. Estendere rispettive classi.
  2. sovrascrittura rispettiva classe utilizzando il meccanismo di configurazione Magento in config.xml.
  3. Se precedente è impossibile da raggiungere -. Posto le modifiche (classi rattoppate) in app / code / local, vale a dire superiore al fine include_path in modo che il codice verrà utilizzato in modo efficiente al posto del codice del fornitore

Se le vostre preoccupazioni modifica phtml templating -> uso Magento meccanismo di layout per sostituire phtml del fornitore con il vostro. Una personalizzazione corretta progettazione richiederà attività di modifica pesanti e lavoro della disposizione in ogni caso.

Se le vostre preoccupazioni modifica JS -.> Ancora una volta, i layout di per collegare il codice posto in js o cartelle di pelle

Penso che si sta parlando di cose diverse.

I suggerimenti di Yauhen sono totalmente corretto. È possibile realizzare tutto questo in git, e non è necessario sottomoduli o sottostrutture.

ho circa lo stesso file .gitignore come voi, in modo che sembra buono.

Ho fatto un interessante resoconto su come usiamo git come una squadra per la gestione dei negozi Magento qui, forse sarà utile a voi:

Best practice per Magento distribuzione

Quilt-come flusso di lavoro

Questo è esattamente ciò che è stato precedentemente fatto con la trapunta, che al giorno d'oggi fare con Stacked Git (su cima di Git), Mercurial Queues (in cima Hg) o Loom (sulla parte superiore del Bazaar).

L'idea è quella di mantenere una serie di patch impilati l'uno sull'altro, che si applica ai file di versione dal SCM (potenzialmente anche la creazione di nuovi file, che sarebbe il caso per voi). In qualsiasi momento, è possibile pop lo stack del tutto, aggiornare il codice a monte, quindi riordinare tutte le patch uno per uno. Se tutti si applicano in modo pulito, è fatto automaticamente, in caso contrario, il processo si ferma alla prima patch difettosa.

Pure Git

Di seguito considera che si sta copiando un pronti contro termine Magento Git. Se non usano Git, è ancora possibile farlo prima traducendo la loro storia a Git, per esempio con su misura .

Rebase

Git rende facile ri-applicare una parte della storia da un diverso punto di partenza, da rebasing . Così si potrebbe anche solo clone di Magento, lavorare il codice e, quando si aggiorna Magento, facendo dall'ultima revisione pulita Magento e quindi rebasing il lavoro sulla nuova revisione pulito Magento.

Che, fondamentalmente, seguire il flusso di lavoro di trapunta con i normali strumenti di Git.

Filiali

Un altro modo di farlo sarebbe usare semplicemente rami. È clonare repo di Magento, ramo da esso, fai le tue cose, e quando si recupera ultime revisioni di Magento, si uniscono i due rami. E 'solo DVCS lavoro tipico , si considera come Magento sviluppatore che lavora su un ramo di caratteristica che non potrà mai rendere al ramo principale ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top