Come combinare due progetti in Mercurial?


84

Ho due repository Mercurial separati. A questo punto ha senso che "diventino una cosa sola" perché voglio lavorare sui due progetti contemporaneamente.

Vorrei davvero che i due progetti fossero ciascuno una sottodirectory nel nuovo repository.

  1. Come unisco i due progetti?
  2. È una buona idea o devo tenerli separati?

Sembra che dovrei essere in grado di eseguire il push da un repository all'altro ... Forse questo è davvero semplice?

Risposte:


69

Sono stato in grado di combinare i miei due repository in questo modo:

  1. Utilizzare hg clone first_repositoryper clonare uno dei repository.
  2. Utilizzare hg pull -f other_repositoryper estrarre il codice dall'altro repository.

Il -fflag (force) sul pull è la chiave: dice di ignorare il fatto che i due repository non provengono dalla stessa fonte.

Ecco i documenti per questa funzione.


1
Ciò preserva anche le chiavi hash dei commit dal secondo repository? (Immagino di no, ma potrebbe essere ok fino a quando non si effettua un'unione.)
Macke,

6
Funziona, ma dovrai anche correre hg mergeper far funzionare finalmente tutto
Factor Mystic

7
@ Marcus Lindblom: estrarre un changeset non cambierà mai e poi mai il suo hash. Se guardi hg glogdopo averlo fatto, vedrai che hai due righe di changeset non correlate. Il primo changeset di ogni riga non ha un genitore, ma non è un problema per Mercurial. Una volta estratto, vorrai creare un nuovo gruppo di modifiche per ogni riga in cui inserisci hg mvtutto nella sottocartella appropriata, quindi unisci le linee e sei pronto.
Steve Losh

1
cosa succede se i due repository hanno un codice comune a entrambi. Sarebbe gestito automaticamente dall'unione? e per quanto riguarda l'unione, possiamo dire $ hg merge?
kamal

2
a scopo di riferimento, ecco i documenti per questo processo mercurial.selenic.com/wiki/MergingUnrelatedRepositories
Gent

7

hg ha iniziato ad avere subrepo dalla 1.3 (2009-07-01). Le prime versioni erano incomplete e traballanti, ma ora è abbastanza utilizzabile.


2
Ho trovato i sottorepositivi con cui lavorare. Funzionano ma devi fare dei salti mortali per convincerli a comportarsi bene e possono essere fonte di molti mal di testa se non stai attento.
Pete Duncanson

4
Potrebbe valere la pena notare che i sottorepository sono ufficialmente una funzionalità di ultima istanza: mercurial.selenic.com/wiki/Subrepository (a partire da 2013.11.12)
jtpereyda

3

Se non stai usando lo stesso codice nei progetti, tienili separati. Puoi impostare il tuo repository personale di ciascuno di questi progetti in modo che sia solo una directory a parte. Perché mescolare tutti i rami, unioni e inviare commenti quando non è necessario.

Informazioni sulla modifica: invio da un repository a un altro. Puoi sempre usare il transplantcomando. Anche se tutto questo sta davvero mettendo da parte il tuo desiderio di combinare i due, quindi potresti sentirti a disagio nell'usare i miei suggerimenti. Quindi puoi usare l'estensione della foresta o qualcosa del genere.

hg transplant -s REPOSITORY lower_rev:high_rev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.