2012-01-31 15 views
7

Attualmente ho solo un mucchio di file php che si trovano nelle cartelle sotto il controllo del codice sorgente. Logicamente ho una collezione di progetti correlati e un database condiviso.Organizzazione di progetto PHP

  • Progetto 1 è un'applicazione Web che interagisce con un database.
  • Il progetto 2 è alcuni processi in background che interagiscono anche con lo stesso database.
  • Il progetto 3 è una libreria che include oggetti di connessione database estesi e altre funzioni di utilità.

I progetti 1 e 2 dipendono dal codice della libreria.

Voglio dividere i progetti in tre repository separati in modo che possano essere sviluppati in modo indipendente.

Qual è l'approccio migliore per organizzare i primi due progetti in modo che dipendano dalla libreria, ma non hanno bisogno della propria copia della libreria nell'albero dei sorgenti?

Devo convertire la libreria in un pacchetto PEAR e disporre di quel pacchetto installato a livello di sistema. Oppure è meglio che i progetti 1 e 2 siano "costruiti/distribuiti" in un certo senso e includano una copia della libreria durante la fase di costruzione. Questo approccio implicherebbe l'uso di qualche tipo di strumento di gestione della build come Phing/PHP-Maven.

+1

Quale software scm stai usando? Che dire dei collegamenti simbolici? – hakre

risposta

3

Mantenere una copia del codice all'interno dell'albero di origine non è una cosa negativa. Ti consente di controllare quando esegui le fasi di aggiornamento piuttosto che imporre il sistema alla tua applicazione. È una brutta situazione quando devi rilasciare il tuo codice e una modifica della libreria avviene poco prima, costringendoti a fare cambiamenti dell'ultimo minuto sul software che doveva essere pubblicato.

Se si utilizza Subversion, è possibile utilizzare gli esterni per includere il codice libreria nell'applicazione e bloccarlo in una determinata revisione. L'aggiornamento riguarda solo la modifica di una proprietà per modificare il numero di versione e aggiornare il codice.

Altri strumenti di controllo versione possono offrire funzionalità simili. Alcuni progetti come Symfony2 includono anche uno script per gestire le dipendenze, tuttavia supportano solo git.

+0

Questo è davvero un punto giusto. Probabilmente la migliore soluzione per ora. Per quello che vale in realtà sto usando Mercurial. Prendi il punto sul non voler essere soggetto a qualunque sia l'ultima versione della libreria. – freshnewpage

+0

C'è una discussione sull'utilizzo di mercurial per questo. Sembra che sia disponibile un'estensione. http://stackoverflow.com/questions/217523/can-i-emulate-svnexternals-using-mercurial –

1

Forse perché sono un utente esperto, preferirei dichiarare project3 come dipendenza da project1 e project2 e utilizzare maven come strumento di gestione build e resolver di dipendenza (tra le altre cose). Il problema della versione indicato da @ Louis-Philippe Huberdeau può essere evitato usando le versioni e dichiarando che le dipendenze sono specifiche della versione: cioè, per i progetti di sviluppo può dipendere da project3-1.0-SNAPSHOT e per il rilascio la dipendenza diventerà project3-1.0-RELEASE . In questo modo i tre progetti possono evolversi indipendentemente. Il controllo delle versioni e la distribuzione degli artefatti possono essere eseguiti da Maven. Successivamente, se ne hai bisogno, puoi usare un server CI, come hudson o Travis CI.

+0

Mi riferivo principalmente a puntare a una posizione fissa su un disco rigido. Le persone comuni di riflesso hanno in PHP. –

+0

Sì, ho a che fare con quella reflex comune in C#: P Usiamo gli esterni di svn in un C# ereditato, ma mi piacerebbe cambiarlo. – Diego

Problemi correlati