mercurialIniziare con mercurial


Osservazioni

Mercurial è un moderno sistema di controllo delle versioni distribuito, open source. Potresti aver sentito parlare di git, che è un po 'più popolare oggi; git e Mercurial sono molto simili e offrono funzionalità per lo più simili.

Gli sviluppatori usano Mercurial per tenere traccia delle modifiche al codice sorgente delle loro applicazioni. Può essere utilizzato per tenere traccia delle modifiche apportate a qualsiasi directory di file, sebbene, come la maggior parte dei sistemi di controllo del codice sorgente, funzioni meglio quando tali file sono file di testo (anziché file binari). Mercurial consente inoltre a più sviluppatori di lavorare contemporaneamente sulla stessa directory di codice sorgente e gestisce il processo di tenere traccia delle modifiche di ogni sviluppatore e quindi di unirle.

Versioni

Mercurial segue un piano di rilascio basato sul tempo e pubblica una versione principale ogni tre mesi, a febbraio, maggio, agosto e novembre. Una versione secondaria viene pubblicata ogni mese rimanente. Si noti che Mercurial non usa il controllo delle versioni sematico, quindi non vi è alcuna differenza significativa tra 2.9.2 (l'ultimo dei 2.9 rilasci) e 3.0.

La retrocompatibilità è un requisito fondamentale per Mercurial, quindi è generalmente sicuro aggiornare semplicemente le installazioni Mercurial secondo necessità. Tuttavia, è una buona idea farlo almeno una volta ogni tre mesi, poiché alcune funzionalità possono rendere i vecchi client incapaci di operare sui repository più recenti.

Le note di rilascio dei progetti descrivono in dettaglio cosa cambia tra le versioni, mentre le note di aggiornamento offrono indicazioni chiare su ciò di cui gli utenti devono essere a conoscenza durante l'aggiornamento.

Una selezione di versioni degne di nota:

Versione Gli appunti Data
3.5 Supporto per Drops per Python 2.4 e 2.5 2015/07/31
2.1 Introduce "fasi" di changeset che consentono la modifica sicura della cronologia 2012-02-01
1.9 Introduce un'API Command Server per supportare una migliore integrazione delle applicazioni 2011-07-01
1.7 Il nuovo formato di repository supporta nomi di file non comuni 2010-11-01

branching

Quando iniziamo il nostro lavoro per la prima volta, dobbiamo decidere se questa è un'area di lavoro separata su cui stiamo lavorando, o fa parte di una linea di lavoro esistente. Se esiste, possiamo lavorare fuori da quel ramo. Se è nuovo, inizieremo una nuova filiale.

Il nostro flusso di lavoro è quindi:

  • hg branch MyNewFeature
  • lavoro lavoro lavoro
  • hg commit -m "committing my changes"
  • lavoro lavoro lavoro
  • hg commit -m "more changes"

A questo punto, vogliamo spingere il nostro lavoro fino al server remoto. Ma prima di spingere i cambiamenti (ignoralo se è un nuovo ramo che non hai spinto prima), dobbiamo controllare se ci sono cambiamenti in entrata in questo ramo. Possiamo verificarlo con:

hg incoming -b .
 

Se ci sono dei changeset in arrivo sul nostro ramo, dobbiamo fare un pull e ribasare le nostre modifiche in cima all'elenco delle modifiche.

hg pull -b . --rebase
 

Una volta fatto questo o se non ci sono changeset in arrivo, possiamo procedere con il Push.

Vogliamo solo spingere il nostro lavoro attuale, non tutto quello che abbiamo mai fatto. Non spingo mai il mio intero repository, ma la mia attuale linea di lavoro. Il ragionamento è che la spinta dell'intero repository presuppone che io stia integrando più linee di lavoro. Ma voglio solo integrare la mia attuale linea di lavoro, e voglio solo lavorare su una riga alla volta.

Se è la prima volta che spingo questo ramo:

hg push -b . --new-branch
 

Se ho già spinto questo ramo:

hg push -b .
 

Il comando "-b" significa semplicemente spingere il ramo corrente e non altro.

Per cambiare tra i rami di lavoro :

hg update myBranchName
 

Iniziare

Vedi anche il Mercurial Tutorial

Creazione di un deposito mercuriale

Un repository Mercurial è semplicemente una directory (denominata "directory di lavoro") contenente una directory .hg con metadati relativi ai contenuti del repository. Ciò rende Mercurial molto leggero e facile da usare. Per creare un nuovo repository è sufficiente eseguire:

$ hg init project
 

Dove project è il nome della directory che desideri creare. Questo crea una directory di project insieme a una directory project/.hg contiene il repository stesso.

   $ cd project
   $ echo Hello World > hello.txt
   $ hg stat
   ? hello.txt
 

Abbiamo appena creato un file hello.txt nel repository e abbiamo eseguito hg status (o stat in breve) per vedere lo stato corrente del nostro repository. Come puoi vedere hello.txt è annotato con un ? , il che significa che Mercurial non ne è ancora a conoscenza. Il comando add registra questo nuovo file con Mercurial, quindi verrà incluso nel prossimo commit.

$ hg add hello.txt
 

Ora che Mercurial è a conoscenza di un file modificato, puoi eseguire diff per vedere esattamente cosa è cambiato dall'ultimo commit - in questo caso stiamo aggiungendo il contenuto completo di hello.txt :

$ hg diff
diff -r 000000000000 hello.txt
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/hello.txt Sat Jul 23 01:38:44 2016 -0400
@@ -0,0 +1,1 @@
+Hello
 

E una volta che siamo felici con loro e pronti a controllare le nostre modifiche, possiamo eseguire commit :

$ hg commit -m "Created a hello world file."
 

Si noti che abbiamo incluso un messaggio di commit con -m - se non si specifica -m Mercurial avvierà un editor di testo in cui è possibile inserire un messaggio di commit. Ciò è utile se si desidera fornire un messaggio multilinea più lungo.

Una volta che hai effettuato il commit delle modifiche, non vengono più visualizzate se esegui hg stat poiché il repository è ora sincronizzato con il contenuto della directory di lavoro. Puoi eseguire il log per visualizzare un elenco di commit e -v include dettagli aggiuntivi come i file toccati da ciascun commit:

$ hg log -v
changeset:   0:b4c06cc77a42
tag:         tip
user:        Michael Diamond@Aodh <dimo414@gmail.com>
date:        Sat Jul 23 01:44:23 2016 -0400
files:       hello.txt
description:
Created a hello world file.
 

Installazione e configurazione

Puoi scaricare Mercurial dal sito web del progetto e ci sono utility grafiche per Windows, Linux e OSX se preferisci l'interfaccia a riga di comando. Molti gestori di pacchetti Unix includono Mercurial, per esempio su Debian / Ubuntu:

$ apt-get install mercurial
 

È possibile verificare che Mercurial sia installato eseguendo:

$ hg --version
 

Impostare

Mercurial funziona immediatamente, ma probabilmente vorrai configurare Mercurial per sapere chi sei prima di andare oltre. Per associare un nome utente con i tuoi commit modifica ~/.hgrc (o mercurial.ini nella tua directory home su Windows) e aggiungi le seguenti righe:

[ui]
username = Your Name <your@email.address>
 

Se non vuoi farlo, puoi sempre specificare un nome utente quando ti impegni con il flag -u , ad esempio:

$ hg commit -u "Your Name <your@email.address>"
 

Spingendo e tirando

Mercurial semplifica la condivisione del tuo lavoro e il contributo di altri sviluppatori. Ciò comporta tre passaggi chiave; clonazione , trazione e spinta .

Clone

Per copiare un repository remoto sul tuo disco locale devi "clonarlo". Per farlo, passa semplicemente l'URL remoto che desideri clonare. Per clonare il codice sorgente Mercurial, esegui semplicemente:

$ hg clone https://selenic.com/hg
 

Ciò crea una directory hg locale contenente una copia del repository Mercurial che è possibile creare, modificare e confermare (anche se non è possibile pubblicare nuovamente i commit nel repository principale).

Tirare

Una volta eseguito il check out di un repository, dovrai mantenerlo sincronizzato mentre altri pubblicano le modifiche. Puoi tirare giù le nuove modifiche semplicemente eseguendo:

$ hg pull
 

Ciò attira nuovi commit ma non aggiorna la tua directory di lavoro, quindi non vedrai nessuna modifica immediatamente. Per aggiornare il contenuto dell'esecuzione della directory di lavoro:

$ hg up
 

Che aggiorna la directory di lavoro alla revisione tip (più recente) nel repository.

Puoi anche eseguire:

$ hg pull -u
 

Per inserire nuove modifiche e aggiornare la directory di lavoro in un unico passaggio.

Spingere

Supponendo che tu abbia accesso in scrittura al repository remoto puoi pubblicare qualsiasi commit che hai fatto localmente nel repository remoto con altrettanta facilità con:

$ hg push
 

Questo carica le tue modifiche fintanto che non ci sono stati altri commit dall'ultima volta che hai tirato. Se la tua push viene respinta perché "crea teste aggiuntive" significa che devi inserire quelle nuove modifiche e unirle con le tue.

$ hg pull
$ hg merge  # this creates a new changeset merging your changes with the remote changes
$ hg commit -m "Merged in remote changes"
$ hg push
 

La maggior parte delle volte è tutto ciò che dovrete fare da quando Mercurial gestisce la fusione delle modifiche automaticamente, tuttavia a volte è necessario risolvere manualmente i conflitti di fusione (vedere la sezione relativa alla fusione). Se è necessario, puoi sempre annullare un'unione e tornare a una directory di lavoro pulita con:

$ hg up -c
 

Ma ricorda che questa è un'operazione distruttiva; eventuali modifiche nella directory di lavoro verranno cancellate.