Dipendenze del progetto Git da GitHub


14

Ho scritto un framework PHP e un CMS in cima al framework. Il CMS dipende dal framework, ma il framework esiste come cartella autonoma all'interno dei file CMS. Vorrei mantenerli come progetti separati su GitHub, ma non voglio avere il casino di aggiornare il progetto CMS ogni volta che aggiorno il framework. Idealmente, vorrei che il CMS in qualche modo tirasse i file del framework per l'inclusione in una sottodirectory predefinita piuttosto che impegnare fisicamente quei file.

È possibile con Git / GitHub? In tal caso, cosa devo sapere per farlo funzionare? Tieni presente che sono a un livello molto, molto semplice di esperienza con Git: posso creare repository e impegnarmi utilizzando il plug-in Git per Eclipse, connettermi a GitHub e questo è tutto. Attualmente sto lavorando da solo ai progetti, quindi non ho dovuto imparare molto di più su Git finora, ma mi piacerebbe aprirlo ad altri in futuro e voglio assicurarmi di averlo bene.

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


Risposte:


11

Innanzitutto, se vuoi davvero usare git per questo, allora considera l'utilizzo della sua funzionalità Submodule :

Il supporto del sottomodulo di Git consente a un repository di contenere, come sottodirectory, un checkout di un progetto esterno. I sottomoduli mantengono la propria identità; il supporto del sottomodulo memorizza semplicemente la posizione del repository del sottomodulo e l'ID commit, così gli altri sviluppatori che clonano il progetto contenente ("superproject") possono facilmente clonare tutti i sottomoduli nella stessa revisione. Sono possibili checkout parziali del superprogetto: puoi dire a Git di clonare nessuno, alcuni o tutti i sottomoduli.

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

Detto questo, consiglierei di non utilizzare il sistema di controllo della versione per la gestione delle dipendenze e piuttosto di iniziare a utilizzare uno strumento di generazione in grado di gestire queste cose per te, come Maven o Ant . C'è anche uno strumento di costruzione specifico per PHP in sviluppo chiamato Phing , ma non l'ho ancora usato da solo. È menzionato in un articolo che discute la tua domanda: Controllo versione! = Gestione delle dipendenze .

Il motivo per cui gli strumenti di compilazione possono adattarsi meglio a lungo termine è perché spesso supportano anche diversi tipi di repository, librerie esterne (e posizioni diverse) e controlli approfonditi. Se tuttavia vuoi solo integrare queste due librerie e non vuoi alcuna seccatura aggiuntiva, l'approccio sottomodulo è probabilmente sufficiente.


+1 - Grazie Deckard. Ho pensato che Git avesse qualcosa come i sottomoduli, semplicemente non sapevo come si chiamasse. Daremo sicuramente un'occhiata a Phing. Volevo uno strumento di compilazione PHP che gestisse le dipendenze, eseguisse test unitari e quindi lo distribuisse sul mio sito. Sembra che Phing possa probabilmente fare tutto questo. Sembra anche che ci vorrà un po 'di tempo per imparare. Conosci qualche buon screencast per Phing (Google non è gentile in questo senso)?
VirtuosiMedia

Il collegamento a "Funzionalità sottomodulo" è interrotto e anche il collegamento a "Controllo versione! = Gestione dipendenze"
Ferrybig

6

Git Submodules è un ottimo modo per gestire le dipendenze dei progetti git.

Se stai cercando un altro approccio:

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

Maggiori informazioni sul compositore:

Composer è uno strumento per la gestione delle dipendenze in PHP. Ti consente di dichiarare le librerie dipendenti di cui il tuo progetto ha bisogno e le installerà nel tuo progetto per te.

Nella pagina della documentazione , puoi trovare un esempio di come sarebbe 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"
    }
}

Dopo aver creato il tuo file composer.json e composer.lock per il tuo progetto, puoi semplicemente installare facilmente le tue dipendenze:

composer.phar install o aggiornali: composer.phar update o crea un particolare progetto da packagist : composer.phar create-project acmeproject


1

Di recente ho iniziato a utilizzare uno strumento chiamato Pundle per gestire le 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 tue dipendenze in modo che i checkout Git / SVN siano inseriti in una directory che non è sotto il controllo versione (ad es. "Vendor") in modo da avere un nuovo inizio su ogni checkout e mantenere snello il repository del tuo progetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.