Utilizzare GitHub con Mercurial e TortoiseHG

Utilizzare GitHub con Mercurial e TortoiseHG

Introduzione

Non esiste sviluppatore degno di questo nome che non conosca GitHub, il popolare servizio di hosting di progetti software basato su tecnologia Git. Nel remoto caso in cui non ne abbiate mai sentito parlare vi consigliamo di recuperare le apposite voci di wikipedia relative rispettivamente a GitHub e a Git e i relativi siti ufficiali github.comgit-scm.com.

In caso contrario, continuate a leggere: saprete infatti fin troppo bene che l'utilizzo del servizio GitHub è convenzionalmente vincolato all'adozione di Git, un sistema di controllo di versione (source-control manager o SCM) particolarmente innovativo che in questi ultimi anni ha avuto - anche grazie alla popolarità dello stesso GitHub - una grandissima affermazione, soppiantando gli antichi e gloriosi standard open-source come CVS e SVN grazie ad un'architettura più moderna e basata su un sistema di versioning distribuito piuttosto che centralizzato.

Grazie a queste caratteristiche innovative oggi Git è senza ombra di dubbio il SCM più utilizzato da tutta la comunità Linux - non per niente è stato ideato da un certo Linus Torvalds. Ha avuto però certamente minore fortuna in ambiente Windows, per via di due principali motivi:

  • una tardiva diffusione delle principali interfacce grafiche di gestione - msysgit e TortoiseGit su tutte - particolarmente care agli utenti Windows, per loro natura meno avvezzi all'uso della command-line.
  • la quasi-contemporanea diffusione di Mercurial (noto anche come HG), un SCM distribuito dalle caratteristiche innovative simili a quelle di Git e caratterizzato da un maggiore supporto a livello applicativo per il sistema operativo di casa Microsoft.

Ad influire notevolmente sulla diffusione di Mercurial in ambiente windows è stato, nel 2008, il lancio del sito bitbucket.org, interamente basato su Mercurial (fino al 2011, anno in cui è stato integrato anche Git) e avente caratteristiche in tutto e per tutto simili a quelle offerte da GitHub.

Non è mia intenzione addentrarmi ulteriormente sull'argomento, né dire la mia su quale sia effettivamente il SCM e/o il sito migliore: personalmente, da affezionato utilizzatore di entrambi, ritengo che siano due ottimi prodotti e che - al di là della diversa filosofia di approccio - garantiscano allo sviluppatore funzionalità grossomodo analoghe per la quasi totalità degli utilizzi comuni.

Per una analisi approfondita delle somiglianze e differenze tra Git e Mercurial consiglio di leggere questi due ottimi (seppur datati) articoli. Il primo ha un approccio più tecnico e schematico, il secondo adotta invece un registro più ironico e discorsivo: scegliete quello che più vi ispira, allo stesso modo con cui spesso si finisce per scegliere l'SCM da utilizzare.

Interoperabilità tra Mercurial e Git con TortoiseHG

Veniamo adesso al cuore di questo articolo: come utilizzare il sito GitHub e i servizi ad esso correlati avendo a disposizione Mercurial al posto di Git. La cosa può sembrare un controsenso, visto che GitHub nasce come un servizio di hosting per repository Git e non prevede - a differenza di Bitbucket - l'utilizzo di altri SCM. A che pro utilizzare Mercurial?

Personalmente non ho mai avuto bisogno di rispondere a questa domanda fino al giorno in cui non mi sono trovato a dover pubblicare su GitHub - su richiesta di un cliente - un progetto di grandi dimensioni gestito tramite Mercurial. L'ipotesi di cambiare SCM in corsa non era ovviamente praticabile, a meno di non voler perdere tutto lo storico delle revisioni e/o modificare la configurazione di tutti i client di sviluppo; tantomeno era possibile dar vita a un secondo repository distribuito, il quale avrebbe provocato un raddoppio del peso - nonché di tutte le attività di check-in e sincronizzazione - sui suddetti client.

Fortunatamente per chi ha questo tipo di esigenze esiste un plugin nativo della suite TortoiseHG - una delle più diffuse e utilizzate GUI per Mercurial in ambiente Windows - che è in grado di risolvere il problema nel modo più semplice: creare un bridge di interoperabilità tra Mercurial e Git che consente di utilizzare l'interfaccia e i comandi del primo per accedere ai repository creati con il secondo. Il nome del plugin è hggit ed è incluso nel pacchetto di estensioni base fornito con l'installazione dell'applicazione.

TortoiseHG

E' sufficiente attivare il suddetto plugin per rendere TortoiseHG in grado di accedere direttamente a qualsiasi repository Git - inclusi, ovviamente, quelli creati e presenti su GitHub.

 

Creare e gestire un progetto GitHub

Vediamo ora come utilizzare un repository Mercurial per creare e gestire un progetto sul sito GitHub senza bisogno di far uso di Git.

Nel caso in cui il repository non esista, createlo utilizzando lo strumento command-line oppure l'interfaccia grafica di TortoiseHG: in caso contrario, saltate pure questo passaggio.

mercurial.create.repository

Non dimenticate di effettuare anche un commit, così da aggiungere i file al repository locale appena creato. Collegatevi quindi al sito github.com , effettuando il login con le vostre credenziali se necessario, e create un nuovo repository:

github.new.repository

 

Compilate il form successivo inserendo i campi necessari: scegliete un nome da dare al repository e impostatelo come pubblico o privato a seconda delle vostre esigenze:

Utilizzare GitHub con Mercurial e TortoiseHG

 

Evitate per il momento di inserire i file README, gitignore e license. Fate click su Create repository e vi troverete di fronte al vostro progetto:

github.new.repository.result

Copiate la URL relativa all'indirizzo del repository appena creato ( https://github.com/Darkseal/my.hggit.project.git  nell'esempio mostrato) e aggiungete  git+  all'inizio, modificandola nel seguente modo:

Il prefisso  git+  informa il plugin hggit di compiere le operazioni necessarie per creare un bridge tra Mercurial e il repository Git remoto - in questo caso, GitHub.

Inserite quindi la URL così modificata nell'interfaccia di TortoiseHG relativa alla configurazione dei repository remoti, accessibile dall'opzione Synchronize... presente nel menu contestuale accessibile facendo click con il tasto destro sulla cartella del repository presente sull'HDD locale:

mercurial.save.url

 

 

Fate click su Salva e poi lanciate il comando di sincronizzazione dal repository locale verso il repository remoto. La GUI vi chiederà di inserire l'username e la password, corrispondenti al vostro account su GitHub. Notate che, nel corso dell'operazione di sincronizzazione, il sistema potrebbe chiedervi le credenziali per due volte consecutive: la cosa è del tutto normale, si tratta di un effetto collaterale legato al bridge che il plugin hggit predispone tra Mercurial e Git, che in questo singolo caso si rivela meno "invisibile" del solito.

Al termine dell'operazione - e da questo momento in avanti - il vostro progetto sarà visibile ed accessibile nel branch master del repository GitHub:

github.project.done

Complimenti, ce l'avete fatta!

 

Conclusioni

Giunti a questo punto, i più esperti di GitHub vorranno probabilmente sapere se il metodo appena presentato consente anche di gestire branch alternativi, come ad esempio il noto branch gh-pages utilizzato da GitHub per creare e gestire le pagine web di ciascun progetto (non sai cosa sono? fai click qui per maggiori informazioni). La risposta è, fortunatamente, affermativa: è possibile farlo sfruttando i bookmark che, in Mercurial, equivalgono grossomodo ai branch di Git. Avrò cura di spiegare i dettagli implementativi in un articolo di prossima pubblicazione.

Il progetto di esempio creato in questo articolo è disponibile a questo indirizzo... Su GitHub, ovviamente.

Felice sviluppo!

 

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

4 Comments on “Utilizzare GitHub con Mercurial e TortoiseHG”

  1. Pingback: Gestire le GitHub Pages con Mercurial e TortoiseHG - Ryadel
  2. Pingback: Manage GitHub Pages with Mercurial and TortoiseHG - Ryadel
  3. Pingback: Usare Mercurial HG Source Code Control Manager con Visual Studio 2015

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Il periodo di verifica reCAPTCHA è scaduto. Ricaricare la pagina.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.