2010-11-17 12 views
22

Sono nuovo di Mercurial HG. I miei amici hanno creato un repo e lo userò. Ho installato TortoiseHG e sto cercando di ottenere l'ultimo codice. Ho scoperto che quando si utilizza l'operazione di clonazione, si trascina tutto il codice sul mio locale, comprese le cronologie (ho ragione?). Questo non è necessario per me. Voglio solo avere l'ultimo codice. C'è un'operazione per questo?Quando si utilizza Mercurial HG, come ottenere l'ultimo codice?

+0

Grazie tutti i ragazzi! Anche se devo ancora clonare l'intero repo, imparo di più su Mercurial HG da ogni risposta! – DeepNightTwo

risposta

18

In breve, no.

Un po 'più lungo: Mercurial non supporta ancora i cloni "superficiali" in cui si ottiene solo una parte della cronologia. Quindi, ogni volta che cloni, estrai l'intero repository con tutti i changeset.

Inoltre, a differenza di Subversion, non è possibile creare un clone "stretto" in cui si esegue il checkout solo di una parte di un repository. Ad esempio, se un repository dispone di directory foo/ e bar/, non è possibile ottenere solo la directory bar/. In altre parole, Mercurial opera sempre su istantanee a livello di progetto.

+1

Sembra la storia è una cosa importante per Mercurial. E includerà sempre l'intera storia. – DeepNightTwo

+4

Ho cambiato la terminologia nella risposta a quello che normalmente si usa in Mercurial: parliamo di cloni "superficiale" quando si ottiene solo una parte della storia e cloni "strette" quando si ottiene solo una parte della struttura dei file. –

+3

Le persone hanno realizzato prototipi per cloni poco profondi, ma non fanno ancora parte della distribuzione principale. –

4

Dopo aver clonato un repository, per ottenere il codice del "suggerimento" (l'ultima versione del ramo corrente, quella predefinita se non precisa), è sufficiente disporre di update.

È disponibile un'azione di aggiornamento in TortoiseHG. Una volta fatto, puoi guardare i file nella cartella.

Se si desiderava un altro stato del repository (una versione precedente o uno vecchio stato taggato), è ancora il comando update, con altri parametri (consultare i documenti o l'interfaccia TortoiseHG).

+0

Grazie per quello che mi hai detto! – DeepNightTwo

3

Se si desidera solo l'ultimo codice e non si intende eseguire alcunché relativo al repository con esso, come commit o diff a versioni precedenti o qualsiasi altra cosa, allora dipende da dove si è ottenuto il codice da e come.

Se sta utilizzando uno dei servizi di hosting, come bitbucket, di solito c'è un collegamento per il download che ti dà solo il codice sorgente.

Per esempio, se si va here, c'è un "Get fonte" di collegamento in alto a destra che vi dà alcune scelte nel formato di file (zip o quant'altro.)

Se hai i file da qualche parte altrimenti, è necessario esplorare l'interfaccia da cui li hai ottenuti. Prova ad incollare il link che hai clonato nel tuo browser e vedere cosa ottieni.

+0

Ho bisogno di eseguire operazioni come il check-in e l'aggiunta di file. Ancora mi sto curando Mercurial come SVN ... – DeepNightTwo

2

Sicuro. Clona il repository, quindi elimina la sottodirectory .hg.

+0

Il problema è che lancia ancora un sacco di tempo per clonare l'intero repo. Sembra che debba ... – DeepNightTwo

+0

In realtà non è una soluzione così brutta. – Marian

5

Il modo più semplice per ottenere ciò che si vuole:

hg archive [destination folder] 
0

a tirare solo un sottoinsieme di changeset, specificare una o più revisioni identificatori con -r/- REV o rami con -b/--ramo. Il clone risultante conterrà solo i changeset specificati e i relativi antenati.

ad es. hg clone -b NeededBranch http://example.com/myRepo

Mercurial manual

+1

La domanda era come clonare senza tirare la storia, tirando gli antenati è ancora in corso di tirare un sacco di storia nella maggior parte dei casi d'uso. –

+0

@YaakovKuperman: Potrebbe essere che è OK per tirare la storia una volta, se da allora in poi la storia viene tagliato. Ma hai ragione, nella maggior parte dei casi questo non ridurrà molto la dimensione totale della storia. Questa tecnica è più utile per gestire situazioni di conflitto di unione disordinata. – Yitz

2

potrei essere un po 'tardi, ma in realtà è possibile dimenticare qualche storia con Mercurial. Devi solo abilitare l'estensione di conversione dal tuo file mercurial.ini o.hgrc file.

[extensions] 
hgext.convert= 

Ora è possibile utilizzare l'estensione di conversione per "clonare" solo i changeset a partire dalla revisione specificata.

hg convert --config convert.hg.startrev=[wheretostart] path_to_full_history_repo path_to_new_repo 

Basta notare che questa non è la stessa operazione con hg clone. Ecco perché il repository di origine deve essere un repository locale. Per esempio se abbiamo un repository in MyProject cartella e vogliamo dimenticare tutte le modifiche apportate prima della revisione 100. Siamo in grado di utilizzare il seguente comando:

hg convert --config convert.hg.startrev=[100] MyProject MyShrinkedProject 

Se avete intenzione di usare questo repository rattrappito su un "centro server "ricorda di averne cura, tutti lo clonano prima di continuare a lavorare. I repository non sono più compatibili tra loro.

+0

Questa risposta presuppone che è OK per ottenere un clone completo una volta, e da allora in poi l'uso solo un clone parziale. È una buona soluzione se hai bisogno di una parte della cronologia, ma solo di tornare ad una certa revisione. Se vuoi iniziare fresco senza cronologia: 1. Inizia con un clone completo. 2. Esegui hg manifest e salva il risultato in un file. 3. Elimina la cartella .hg. 4. Esegui hg init. 5. Esegui hg add sulla lista dei file salvati. – Yitz

Problemi correlati