Integrazione di diversi rami da fonti esterne in un unico repository Mercurial

8

Modifica : rendendolo ancora più chiaro man mano che la taglia sta per scadere: esiste un modo di importare la cronologia (estraendo da diversi SCM) direttamente in un ramo specifico con Mercurial?

Attualmente sto lavorando in un'azienda che utilizza Perforce e sto facendo strada per il controllo della versione distribuita con Mercurial. Ho avuto successo nell'importare la cronologia di Perforce utilizzando la perfarce (un nome abbastanza adatto, rido ogni volta che lo vedo / lo dico), tuttavia, funziona solo con un singolo ramo alla volta.

Ecco come funziona la mia integrazione con P4:

  • Per forza, crea un "cliente", che è una specie di descrizione di ciò che aggiornerai / estrai costantemente. Questo può riguardare solo un ramo alla volta (tronco o altro).
  • Una volta fatto, esegui hg clone p4://<server>/<client_name>
  • Vai a .hg / hgrc e inserisci la linea del percorso di perforce: perforce = p4://<server>/<client_name>
  • Funziona normalmente con il codice sotto Mercurial, fai hg pull perforce per sincronizzare, hg push per esportare un elenco delle modifiche

Quello che mi piacerebbe essere in grado di fare è avere un percorso forzato per ramo e avere tutto ciò che funziona nello stesso repository. Ora, la spinta non è un problema, tuttavia, se estraggo la cronologia da un altro ramo, finirebbe con il ramo predefinito.

Mi piacerebbe essere in grado di fare qualcosa come hg pull perforce-R5 e farlo atterrare nel ramo R5 di Mercurial. Anche se non avessi una storia di fusione, sarebbe abbastanza dolce poter conservare la cronologia del ramo.

Ci sono anche altri plugin per CVCS che ti permettono di integrare mercurial, ma AFAIK il subversion ha lo stesso problema.

Non penso che ci sia un modo diretto per farlo, ma finché potrei automatizzare il processo con alcuni hook e script in una singola macchina Mercurial, sarebbe sufficiente.

Modifica : per rendere le cose un po 'più chiare:

  • Perforce trunk è mappato al ramo predefinito di Mercurial
  • Il ramo Perforce R1 deve essere mappato al ramo release-1 di Mercurial (uguale per R2, R3, ecc.)
  • Quando dico a Mercurial di tirare dalla perforce (cioè hg pull perforce , dove "perforce" è il nome del percorso che punta al client Perforce) dovrebbe estrarre il trunk Perforce nell'impostazione predefinita di Mercurial.
  • Quando dico a Mercurial di tirare da perforce-R1 (cioè hg pull perforce-R1 , dove "perforce-R1" è il percorso del client R1) dovrebbe tirare il ramo Perforce R1 al ramo "release-1" di Mercurial. QUESTA È LA PARTE CHE STO CHIEDENDO .
posta dukeofgaming 18.06.2012 - 03:22
fonte

1 risposta

0

Non credo che ciò possa essere fatto direttamente.

Un'opzione consisterebbe nell'utilizzare lo strumento rebase per spostare le parti appropriate del repository sull'altro ramo dopo il pull usando qualcosa come i seguenti passaggi:

  • Crea il ramo desiderato, ad es. %codice%
  • Conferma nuovo ramo: hg branch release-1
  • Estrai il repository remoto al ramo mercurial predefinito: hg commit -m "Created branch"
  • Rebase il nuovo pull sul ramo desiderato: hg pull perforce-R1
risposta data 26.06.2012 - 16:03
fonte

Leggi altre domande sui tag