Gli esterni possono essere usati per quello che stai provando, ma prima dovresti controllare se ne hai davvero bisogno. Per il nostro team, è in gran parte sufficiente avere i nostri moduli condivisi in una cartella sotto denominata shared_libs
, e lasciare che tutti utilizzino i progetti per riferirsi a tale cartella con un percorso relativo. Tuttavia, occorrerà disporre di elementi esterni se si avranno i moduli libs / condivisi in diverse cartelle locali sotto la cartella del progetto. In questo modo, puoi gestire le situazioni in cui ti occorre
contemporaneamente nello stesso momento nel tuo ambiente di sviluppo. Usando gli esterni, non puoi semplicemente controllare di avere copie diverse in posizioni diverse nel tuo ambiente di sviluppo, ma ottieni anche un controllo preciso su quale revisione, o ramo, o versione taggata del lib / modulo che vuoi aver inserito lì.
Per noi, tuttavia, è per lo più sufficiente avere versioni diverse della stessa lib solo nel nostro ambiente di produzione (usiamo alcuni aspetti esterni, ma non per la maggior parte delle librerie condivise). Per i test e la distribuzione, la maggior parte dei nostri script di compilazione trascina i risultati compilati in una cartella di test o di distribuzione, senza l'aiuto di SVN.
Lo svantaggio dell'uso di esterni è che hai aumentato lo sforzo amministrativo - potresti aver bisogno di aggiornare esplicitamente una versione più recente di una lib in ogni progetto che la usa. Per modificare e inviare modifiche al codice sorgente delle tue librerie direttamente nella cartella di controllo esterna dovrai utilizzare il meccanismo di revisione pegging di SVN (o forse è esattamente quello che vuoi proibire). E se le tue librerie condivise dipendono da altre librerie condivise, magari in modo ricorsivo, devi assicurarti che i percorsi relativi di tutte quelle librerie nel tuo file system locale siano sempre simili tra loro. Dovrai convalidare se ciò di cui hai bisogno e / o quello che vuoi.
Riguardo alla tua seconda domanda: SVN non è davvero lo strumento giusto per il tracciamento delle dipendenze, l'unico posto affidabile in cui sono archiviate le dipendenze sono i tuoi file make / file di progetto / script di costruzione / linker (qualunque cosa tu usi per il tuo processo di compilazione) , quindi il mio primo suggerimento sarebbe quello di scansionare quei file con uno script per raccogliere informazioni sulle dipendenze. Ciononostante, se userai gli esterni SVN di conseguenza per ogni dipendenza del modulo condivisa , sono sicuro che puoi scrivere uno script che itera sui progetti nel tuo repository e raccoglie quali elementi esterni sono aggiunti lì . E non credo che avrai bisogno di un hook per questo, usa solo svn propget svn:externals
per questo, come mostrato qui .