2009-07-02 6 views
21

Ho un progetto molto vecchio che include direttamente la fonte da un altro progetto, invece di collegarlo come una libreria. Tornando ai giorni brutti, mentre mantenevo tutto in CVS, avevo il codice esterno su un ramo del venditore e facevo importazioni periodiche. Ora che il mio progetto è in git, avrebbe più senso includere il progetto esterno come sottomodulo. Ma c'è un problema: il progetto esterno è migrato su Mercurial. Ho trovato i progetti git-hg e hg-git, ma non sono sicuro se uno dei due gestisce correttamente i sottomoduli.sottomodulo git da repo Hg?

C'è un modo per creare un sottomodulo git che punta a un repo Hg invece di un repository git?

risposta

12

Dal momento che l'hg-git fa menzione che sottomoduli non sono ancora supportati, che lascia solo un'opzione manuale:

  • impostare un repository Git da qualche parte che si ha accesso push to,
  • aggiungerlo come Git remota e quindi
  • eseguire hg gpush dall'interno del progetto.

Ad esempio:

$ cd hg-git # (an Hg repository) 
$ hg gremote add origin [email protected]/schacon/hg-git.git 
$ hg gpush 

Che Git repo rappresenterà il vostro modulo, ma se si modifica e spingere che modulo, si avrà ancora a tirare da quella Git repo al repo reale Hg.

Altri grandi comandi git-hg sono elencati in questo "rosetta stone".

+1

C'è un errore di battitura nell'esempio. "$ hg push" dovrebbe essere "$ hg gpush" come menzionato nella descrizione sopra. Tranne che, la risposta di @ VonC è stata molto utile per me. Grazie! :-) –

+1

Questo esempio confonde con la sua denominazione. Qual è la directory del repository principale e qual è la directory submodule/subrepo? – einpoklum

+0

@einpoklum da quello che posso leggere da questa domanda di 7 anni, il sottomodulo è il repository esterno che è migrato a mercuriale. L'obiettivo è quello di spingere dal tuo clone mercuriale locale al repository Git remoto, che può quindi essere referenziato come sottomodulo da qualsiasi repository padre Git. – VonC