Dipendenze del progetto Git su GitHub

14

Ho scritto un framework PHP e un CMS in cima al framework. Il CMS dipende dal framework, ma il framework esiste come una cartella autonoma all'interno dei file CMS. Mi piacerebbe mantenerli come progetti separati su GitHub, ma non voglio avere il caos di aggiornare il progetto CMS ogni volta che aggiorno il framework. Idealmente, mi piacerebbe che il CMS estrasse in qualche modo i file framework per l'inclusione in una sottodirectory predefinita piuttosto che per il commit fisico di quei file.

Questo è possibile con Git / GitHub? In tal caso, cosa devo sapere per farlo funzionare? Tieni presente che sono a un livello molto, molto elementare di esperienza con Git - Posso creare repository e commit usando il plugin Git per Eclipse, connettersi a GitHub, e questo è tutto. Al momento sto lavorando da solo ai progetti, quindi non ho dovuto imparare molto di più su Git fino ad ora, ma mi piacerebbe aprirlo ad altri in futuro e voglio essere sicuro di averlo nel modo giusto.

Inoltre, quale dovrebbe essere il mio flusso di lavoro ideale per i progetti con dipendenze? Qualche consiglio su questo argomento sarebbe molto apprezzato. Se hai bisogno di maggiori informazioni sulla mia configurazione, basta chiedere nei commenti.

    
posta VirtuosiMedia 01.05.2011 - 04:24
fonte

3 risposte

11

Per prima cosa, se vuoi davvero usare git per questo, allora considera di usare la sua funzionalità del modulo :

Git's submodule support allows a repository to contain, as a subdirectory, a checkout of an external project. Submodules maintain their own identity; the submodule support just stores the submodule repository location and commit ID, so other developers who clone the containing project ("superproject") can easily clone all the submodules at the same revision. Partial checkouts of the superproject are possible: you can tell Git to clone none, some or all of the submodules.

La pagina collegata contiene una discussione dettagliata che include esempi su come usarlo esattamente.

Detto questo, ti consiglio di non utilizzare il tuo sistema di controllo delle versioni per la gestione delle dipendenze e piuttosto di iniziare a utilizzare uno strumento di compilazione in grado di gestire queste cose per te, come Maven o Ant . C'è anche uno strumento di sviluppo specifico per PHP in sviluppo chiamato Phing , ma non l'ho ancora usato io stesso. Viene menzionato in un articolo che descrive la tua domanda: Controllo versione! = Gestione delle dipendenze .

Il motivo per cui gli strumenti di compilazione possono essere più adatti a lungo termine è perché spesso supportano anche diversi tipi di repository, librerie esterne (e posizioni diverse) e controlli estesi. Se tuttavia si desidera semplicemente integrare queste due librerie e non si desidera alcun problema aggiuntivo, l'approccio del sottomodulo è probabilmente sufficiente.

    
risposta data 01.05.2011 - 07:30
fonte
6

Git Submodules è un ottimo modo per gestire le dipendenze del progetto git.

Se stai cercando un altro approccio:

Compositore può fare tutto questo per te. Compositore è un gestore delle dipendenze per php. La sintassi è di JSON. È piuttosto facile ed economico da usare.

Ulteriori informazioni sul compositore:

Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs and it will install them in your project for you.

Nella pagina di documentazione , puoi trovare un esempio di come verrà costruito il tuo file composer.json:

// Composer.json    
{

    "name": "acme/blog",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/composer/hello-world"
        }
    ],
    "require": {
        "acme/hello-world": "dev-master"
    }
}

Una volta che hai creato il tuo file composer.json e composer.lock creato per il tuo progetto, puoi semplicemente installare facilmente le tue dipendenze:

composer.phar install o aggiornali: %codice% oppure crea un particolare progetto da packagist : composer.phar update

    
risposta data 18.07.2012 - 19:10
fonte
1

Recentemente ho iniziato a utilizzare uno strumento chiamato Pundle per la gestione delle dipendenze del mio progetto. Supporta una versione PHP, pacchetti PEAR, repository Git e repository SVN come dipendenze e consente di specificarli facilmente tramite un "file Pundle".

Dovresti anche configurare le dipendenze in modo che i checkout Git / SVN siano messi in una directory che è non sotto Version Control (es. "vendor") in modo da avere un nuovo inizio ad ogni checkout e mantieni il repository del tuo progetto snello.

    
risposta data 06.05.2011 - 11:17
fonte

Leggi altre domande sui tag