moduli condivisi SVN / gestione delle dipendenze

4

Sto lavorando con un piccolo team di sviluppatori. Stiamo usando Subversion per il controllo della versione. Gran parte del software è per sistemi embedded.

Vogliamo impostare un modo ragionevolmente conveniente per condividere moduli software / firmware sviluppati internamente tra più progetti. Le caratteristiche desiderabili includono:

  1. Essere in grado di estrarre i moduli condivisi all'interno di qualunque progetto li utilizzi e costruirli sul posto. (Rende semplice zip / esportazione.)

  2. Per avere tracciabilità in quali progetti utilizza un modulo condiviso, se possibile. (Ad esempio, per poter rispondere alla domanda, "Quali progetti utilizzano FancySharedWidget?".)

Domande

  1. Sto pensando ad una ragionevole configurazione di repo / gerarchia di cartelle con svn: gli esterni (con numeri di revisione espliciti) soddisferanno bene il numero 1. Giusto?

  2. Posso soddisfare il requisito n. 2 con svn: esterni?

    a. Forse con un hook post-commit, per tracciare quando puntelli svn esterni vengono aggiunti o modificati? Esistono già degli script di questo tipo?

  3. Ci sono migliori approcci tools per il lavoro? (Preferibilmente in addizione a combinazione con svn. Non intendo convincere la società a spostarsi da svn , anche se personalmente sono interessato a sentire cos'altro c'è fuori .)

4. Meta: questo post appartiene qui o su Stack Overflow ?

    
posta cp.engr 09.06.2015 - 00:40
fonte

1 risposta

2

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

  • Progetto A per fare riferimento al modulo condiviso L versione / revisione 1.0

  • Progetto B per fare riferimento al modulo condiviso L versione / revisione 1.1

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 .

    
risposta data 09.06.2015 - 08:49
fonte

Leggi altre domande sui tag