Gestione di codice simile su più piattaforme (GIT)

3

Il mio team e io abbiamo sviluppato un'estensione per Chrome che stiamo ora eseguendo il porting in Firefox. Le due versioni condividono abbastanza di un codice base che sarebbe ridondante per gestire la separazione separata. In teoria, in teoria, la differenza è all'interno di pochi file e struttura di cartelle (una volta che si scollina un sacco di codice specifico della piattaforma dagli interni).

L'estensione di Chrome contiene tutti i file nella directory principale, poiché tutto ciò di cui ha bisogno Chrome è il file manifest e i file possono essere posizionati ovunque. Questo è diverso dal plug-in FireFox, poiché FireFox richiede una struttura di cartelle specifica e in cui si trovano i file.

Non ho mai trovato alcuna discussione riguardante specificamente la gestione di più versioni dello stesso progetto, pur mantenendo una base di codice condivisa comune. Se siete a conoscenza di articoli / discussioni, fatemelo sapere!

La struttura per la nostra estensione di Chrome è:

 Root
   [House Extension Scripts]

tuttavia il firefox richiede la seguente struttura:

 Root
    |-Data
        |-[Houses Page Injected Scripts]
    |-Lib
        |-[Houses Plugin Side Scripts]
    |-package.json

che rende l'unione e il mantenimento di una base di codice comune un po 'complicata. In questi casi, Root in Chrome e Data in Firefox contengono file prevalentemente comuni (con poche eccezioni). Non sono sicuro di come farlo in Git. In Perforce è possibile selezionare le cartelle da unire in quali cartelle. Quindi vorrei unire una cartella Dev comune nella cartella root della cartella dell'estensione chrome e nella cartella data del plug-in FireFox.

Nella mia mente, la struttura di ramificazione di Git sarebbe qualcosa del tipo:

      Firefox-Master/-----------------|-------------------------|---
                   /                 ↗                         ↗
      Firefox-Dev /-------------|---|--------|-------|---------|---
                 /             ↗            ↗        ↘
         Dev -----------------|-------------|----------|-----------
                 \             ↘          ↗            ↘
       Chrome-Dev \ ------------|---|----|---------------|----|----
                   \                 ↘                        ↘
     Chrome-Master  \-----------------|------------------------|----

dove il ramo Dev ospita la base di codice comune. Ogni plug-in ha la propria cartella dev, perché ogni versione ha bisogno dei propri file di codice separati per funzionare. Se esiste qualcosa che viene sviluppato nel ramo FireFox-Dev che può essere incorporato in Chrome, verrà prima unito a Dev e quindi Dev verrà unito al ramo Chrome-Dev . Ogni Master è indipendente in quanto viene trattato come un ramo "di rilascio".

Mi chiedo come sia gestito su progetti che hanno prodotti portati su più piattaforme. Ad esempio il kernel Linux per x86 e ARM deve avere un problema simile.

Il più grande ostacolo qui è il fatto che entrambi richiedono una diversa struttura di cartelle. Mi chiedo come viene affrontato questo problema usando Git. Voglio essere in grado di sviluppare in un ramo ed essere in grado di unire qualsiasi codice non specifico della piattaforma nelle altre versioni mantenendo le loro strutture di cartelle uniche.

Per favore fatemi sapere se questa è una domanda vaga e se ho bisogno di aggiornare qualsiasi grafico per essere più chiaro. Qualsiasi aiuto è molto apprezzato!

    
posta Serguei Fedorov 16.04.2015 - 21:18
fonte

2 risposte

3

Non ho alcuna familiarità con lo sviluppo di plugin.

Tuttavia, se il codice è nel controllo sorgente e come lo si presenta a uno dei due browser può essere separato aggiungendo un passaggio di generazione.

Con quel modello:

  • hai un singolo ramo di sviluppo (potresti averne più, ma non ne hai bisogno)
  • la tua fonte è ovunque ti piaccia
  • due distinti passi di compilazione assemblano il sorgente per chrome e firefox
risposta data 16.04.2015 - 21:50
fonte
2

Potresti provare a usare git per gestire una situazione a cui non era destinato [citazione necessaria], forse uno script di compilazione potrebbe essere la risposta.

Se Chrome è flessibile con la struttura delle cartelle, puoi semplicemente seguire la struttura delle cartelle richiesta da Firefox. Avere un ramo per Chrome e un altro per Firefox per gestire i file distinti, quindi in seguito unire uno script per formare una versione di rilascio per ciascun browser.

    
risposta data 16.04.2015 - 21:48
fonte

Leggi altre domande sui tag