8

Ho problemi nella configurazione di un progetto in Mercurial con sottoposizioni.È possibile nidificare i sottorepos in Mercurial?

Obiettivo:

voglio impostare la struttura in questo modo:

-- Build_Repo (this repo will be used to track dependencies) 
    -- Subrepo_A (this is the main source) 
    -- Modules (Part of Subrepo_A) 
     -- Subrepo_B 

Quindi ci sono tre pronti contro termine: Costruire, A e B. B è annidato all'interno di A, A è nidificati all'interno del repository di root build. Il repository di build verrà utilizzato per tracciare le dipendenze, il subrepo A verrà utilizzato per tracciare i file di origine principali e il sottorepo B (e altri) verrà utilizzato per tenere traccia dello sviluppo del modulo/plugin.

Problema/Domanda

non ho impostare il repo di build iniziale e la Subrepo_A nidificato semplicemente aggiungendo il percorso Subrepo_A e di origine per il file .hgsub e impegnandosi al repo accumulo problema. repo percorso 'Subrepo_A/Moduli/Sebrepo_B' è dentro nested ': Tuttavia, quando dopo aggiungo il subrepo_B percorso/sorgente al .hgsub del pronti contro termine accumulo, e quindi provare a commettere ricevo il messaggio di errore:

abort Subrepo_A '

Mercurial non sembra un repo annidato all'interno di un repository già annidato. È vero o mi manca qualcosa? Qualche idea migliore su come gestire build/dipendenze?

+0

Quale lingua/set di strumenti stai utilizzando? Generalmente i sub-repos come gestione delle dipendenze sono sub-ottimali. Mi piace costruire un modulo, pubblicarne gli artefatti (nexus, artefatto, ecc.) E consumarlo da moduli dipendenti. – thekbb

risposta

0

Nella vostra situazione, dovrete aggiungere subrepoB a subrepoA.

Suggerirei di provare a spostare le dipendenze in modo che l'albero abbia solo 2 livelli, ma ciò potrebbe non essere possibile. Altrimenti non è un'esperienza molto liscia altrimenti.

+1

Qualche altro consiglio su come gestire le dipendenze in questa situazione? –

+0

La risposta a questo, come altri hanno notato, è rendere SubrepoB un sottorepo di subrepoA e subrepoA un sottorepo di build_repo. Sembra che tu non voglia farlo per qualche motivo. Se è perché subrepoA è un clone di un progetto che non controlli, e quindi non puoi aggiungere un subrepo, un modo per creare un fork privato/clone di subrepoA e usarlo come repo per " subrepoA". In questo modo è possibile aggiungere personalizzazioni ad esso (aggiungere un sottorepo ad esso) e continuare a sincronizzarsi con pulic/aggiornamenti esterni a subrepoA. –

1

Il problema qui è uno dei vincoli ineludibili di Mercurial: un repository corrisponde a un albero di cartelle sul computer. Il repository è responsabile di tutto sotto quell'albero delle cartelle.

Quando il repository di primo livello include un repository secondario, passa al controllo completo del repository secondario di quella parte della struttura di cartelle. Quindi il livello principale non può specificare un altro sotto-repository da qualche parte nelle prime cartelle sotto-repository.

Soluzione 1

Subrepo_B è in realtà una dipendenza di Subrepo_A. In tal caso, fai in modo che i tuoi repository riflettano la vera dipendenza modificando il file .hgsub di Subrepo_A per aggiungere Subrepo_B sotto Modules/Sebrepo_B. Funziona perché Subrepo_A mantiene il controllo sulle sue cartelle.

Soluzione 2

Subrepo_A non dipende Subrepo_B, è stata messa lì per convenienza. In questo caso, dovresti fare in modo che Subrepo_A e Subrepo_B siano subrepos (in posizioni diverse) di Build_Repo.

Problemi correlati