2010-07-09 14 views
11

Sto usando Mercurial 1.6. Ho un repository con pochi sottopospos (11). Vorrei spingere il repository padre al repository remoto predefinito senza premere i repository figlio. Motivi per cui si desidera fare questo includono:Spingere il repository mercuriale senza premere subrepos

  • Sto utilizzando repository SSH e ci vuole molto tempo per stabilire una connessione e non premere nulla su ciascuno dei sottorepos.
  • Ho commesso in subrepos che non voglio essere propagato ai repository remoti (ancora).
  • I sottorepos hanno dei rami denominati che non devono essere propagati ai repository di repote (e apparentemente non c'è modo di passare i nomi dei rami all'operazione push dei sottorepos).

Tuttavia, non sono riuscito a trovare un modo per raggiungere questo obiettivo. Ho provato a cancellare il contenuto di .hgsub e .hgsubstate (senza commit), ma ancora insiste mercurial nello spingere i sottorepos.

Come posso trasferire le modifiche dal repository locale al repository remoto e ignorare temporaneamente i sottorepos?

risposta

4

Penso che sarà necessario creare cloni locali dei sottorepos.

Il problema con il push del repo principale senza premere i sottorepos è che il contenuto dei sottorepos non fa parte del repository principale - solo i loro stati lo sono. I contenuti sono referenziati dalla posizione originale specificata in .hgsub. Quindi il tuo repository principale è .hgsubstate dice "subrepo A è in revisione abcd1234", ma abcd1234 è un cambiamento che hai fatto che non vuoi spingere ... e ora cosa succederebbe se clonassi il repository principale? Dovrebbe provare a clonare il subrepo dalla sua posizione originale e aggiornarlo ad abcd1234, ma quella revisione non esiste nella posizione originale, quindi il clone fallirebbe.

Invece, è possibile creare cloni locali di ciascun repository esterno e fare riferimento a quelli come posizioni esterne dei sottorepos. Quindi, quando si preme il repository principale, le modifiche al sottorepo si propagheranno solo ai cloni locali. Quando sei pronto per condividere queste modifiche, vai ai cloni locali e spingi da lì, e sarai in grado di passare i nomi dei rami e così via.

+0

Questo ha senso, e mi fa pensare che non stiamo usando i subrepos nel modo in cui sono destinati ad essere utilizzati. Li stiamo principalmente utilizzando per controllare facilmente una raccolta di repository ... e il nostro .hgsubstate fa sempre riferimento alle revisioni NULL dei sottorepos. Sembra che l'estensione hgforest (ora deprecata) fosse migliore per i nostri scopi rispetto ai subrepos. –

+2

Questo ha senso, ma Mercurial sembra essere troppo zelante. Proverà a premere 'abcd1234' anche quando quella revisione (né alcuno dei suoi discendenti) viene chiamata in' .hgsubstate'. Anche 'hg out --S -r .' (il' -S' è per 'recurse in subrepos') non elenca le modifiche del subrepo. – weberc2

+0

Possiamo dirgli di non premere se la fase di tutti i set di modifiche è pubblica, come suggerisce (a patto che non impostiamo manualmente la fase su pubblico) che è già stata inviata. –

Problemi correlati