2012-04-16 17 views
7

In alcuni casi ho la necessità di far rispettare che gli utenti Mercurial hanno eseguito hg pull -u prima che qualsiasi hg commit possa essere consentito, ovvero, hg pull significherà che la coda in entrata è vuoto - e inoltre voglio anche che la persona stia usando la versione principale del ramo.Mercurial: applica "hg pull -u" prima di "hg commit"

Come posso impostare tale restrizione?

(Sono pienamente consapevole che questo va contro le parti della Core Design DVCS)

+0

Un altro modo di chiedere questo è come implementare un trigger server per non consentire spinte che creano più teste. –

+0

Non posso dirti come automatizzare, ma uso "hg incoming" per verificare se devo tirare. Potresti volerlo usare. –

+4

Sarebbe meglio se tu spiegassi il problema che stai cercando di risolvere piuttosto che la soluzione rotta che vuoi risolvere. –

risposta

3

Si potrebbe chiedere agli sviluppatori di installare

[hooks] 
pre-commit = hg pull -u 

nelle loro file di configurazione (probabilmente dovrebbe essere installato nella .hg/hgrc file per-repository dal momento che questo il flusso di lavoro è specifico del repository).

Questo rende Mercurial un po 'subversion: i tuoi sviluppatori avranno solo un changeset eccezionale. Tuttavia, non appena qualcuno spinge al server, hg pull -u non può aggiornarsi alla nuova dirama di ramo poiché attraverserà i rami (rami topologici) per farlo. Quindi sarà necessaria un'unione corretta in quel punto (o uno rebase, vedere hg pull --rebase).

1

Come dice Adam, forse quello che devi veramente fare è prevenire più teste (per ramo). Questo è quello che facciamo, usando l'hook "forbid_2head" da Netbeans (collegato da qui https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads)

Il risultato è che il gancio impedisce qualsiasi spinta che crea più teste su un ramo (quindi una sul ramo anonimo/predefinito più uno ciascuno su rami nominati). Questo forza efficacemente un pull prima del commit perché devi tirare, ottenere le due teste localmente, quindi unire o rebase per rimuoverlo.

nota, il gancio si trova sul server/master repo