Questa è una domanda che sembra venire semi-frequentemente, ma purtroppo non ho trovato una risposta che io possa applicare pienamente alla mia situazione ancora, quindi ho pensato di fare la mia stessa domanda . Questa è la mia prima domanda su SO, quindi sii gentile. : PRepository multipli in una directory
Il "problema": nostra azienda sviluppa molteplici applicazioni PHP, ma una di quelle applicazioni è un "maestro" di sorta. Tutte le altre nostre applicazioni sono installate all'interno di questa "applicazione master" e richiedono il funzionamento dell'applicazione principale.
Utilizziamo il controllo di versione per gestire queste applicazioni, ovviamente.
Mentre molti dei file nelle nostre applicazioni di aggiunta sono nelle sottodirectory, non tutti lo sono. Ciò significa che non possiamo usare l'importazione sottodirectory (estensioni svn, sottomoduli git, ecc.). Ad esempio, all'interno della cartella root ci sono diverse cartelle (admin, public, kernel e così via) e le applicazioni addon hanno file all'interno di una o più di queste cartelle - non sono autonomamente indipendenti all'interno della struttura di directory dell'applicazione master .
Attualmente utilizziamo SVN e recentemente ci siamo trovati a considerare git a causa di alcune delle funzionalità disponibili che riteniamo potrebbero essere utili a noi. Una cosa su cui non sono chiaro è, tuttavia, se esiste davvero un modo per "unire" (non nel senso di controllo della versione) questi repository in una singola directory localmente quando gli sviluppatori stanno lavorando sul codice. Neanche io ho trovato un modo per farlo con SVN.
In un mondo ideale, avremmo un repository per la nostra applicazione "master" con una struttura in questo modo:
- /
- --file1
- --file2
- -/admin
- ---- file1
- ---- file2
- -/pubblici
- ---- file1
La nostra applicazione addon avrebbe una struttura in questo modo (ricordate, abbiamo più applicazioni addon):
- /
- --filex
- -/admin
- ----/myapp
- ------ file1
- ------ fi LE2
- -/pubblico
- ---- filex
Abbiamo sperimentato con i seguenti approcci, ognuno con le proprie avvertimenti:
- Tutte le applicazioni in un unico repository. Questo è meno che ideale in quanto diventa un incubo gestendo le versioni per ogni applicazione in modo efficace (specialmente in SVN). Branching e tagging accettano file da applicazioni non correlate e separate.
- Tutte le applicazioni in un repository separato. Anche questo non è l'ideale (beh, è dal punto di vista gestionale/organizzativo) perché non è possibile esportare due repository separati in una singola cartella, quindi si lavora sempre con un checkout di un repository e un'esportazione di altri. Se si sta lavorando sull'applicazione X e sono presenti modifiche nella nostra applicazione principale, è necessario eseguire manualmente una nuova esportazione di tale applicazione master e copiare i file nell'archivio X dell'applicazione su cui si sta lavorando per disporre del codice framework più recente.
C'è un modo con git o SVN (o qualsiasi altro sistema di controllo di versione per quella materia) per consentire più di un repository all'interno di una singola directory senza utilizzare sottodirectory? Gli esterni di SVN sono quasi perfetti, ma hanno il requisito che tutti i file nel repository esterno si trovino in una sottocartella separata, che come descritto sopra non funziona per noi. Capisco che Git ha capacità equivalenti, ma ancora una volta non può consentire più di un repository in una singola cartella, lasciandoci con lo stesso problema.
domande correlate: Multiple repositories in one directory (same level) - is it possible? - questo è molto vicino a quello che sto chiedendo che penso, ma non ho visto qualsiasi soluzione che ho sentito potrebbe essere applicata alla nostra situazione.
con git, si fa di solito che tipo di materiale con le diramazioni Ogni sviluppatore può avere uno o ciascun sottomodulo o qualsiasi combinazione a cui pensare: quando senti di essere pronto a unire il ramo con il ramo principale (o qualsiasi altro), lo fai. – Timo
Per essere più precisi : Puoi avere un ramo per l'app principale e definire i rami del modulo in base a questo: ereditano la struttura della directory, ma qualunque cosa tu abbia messo in essi, rimane lì. Lo svantaggio è che non puoi lavorare con più rami contemporaneamente: devi li controlli individualmente, ma in effetti tutto sarà in una directory e potrai spostare le cose da un ramo all'altro facilmente. – Timo
+1 per passare a git. O almeno considerandolo. –