2009-08-05 11 views
43

Essendo molto familiare con il flusso di lavoro di sovversione e il fatto che il 99,9% delle volte il mio computer è connesso a Internet, non mi piace fare 'hg ci' e 'hg push' separatamente.push automatico mercuriale su ogni commit

Ricordo che bzr aveva un comando di 'checkout' che vincolava i comandi 'commit' successivi al commit automatico direttamente sul server ('push').

Il mercurio ha qualcosa di simile a questo?

PS: Scrivere uno script di shell o un alias che esegue 'hg ci $ * & & hg push' sarebbe l'ultima cosa che farei.

+2

Perché non uno script? Non è un aggancio che rende lo 0.1% delle volte che vuoi commettere senza spingere molto più forte? –

risposta

54

È possibile aggiungere un hook per eseguire push dopo un commit riuscito.

EDIT: Ho appena provato e sembra funzionare bene. Ho aggiunto il seguente al file .hg/hgrc del repository ho voluto per attivare automaticamente spingere per:

[hooks] 
commit.autopush = hg push 

EDIT 2: Inoltre, non devono preoccuparsi di qualcosa di simile:

  • Sei in un repository che non hai vuoi spingere automaticamente.
  • Si utilizza hg -R ~/another-repo-that-autopushes commit per eseguire il commit in un repository diverso che fa spingere automaticamente.
  • L'hook hg push terminerà la selezione delle modifiche nella directory corrente anziché quella in cui si sta effettuando l'invio?

No, non lo farà. In base alla pagina che ho collegato:

Un hook eseguibile viene sempre eseguito con la directory corrente impostata sulla directory root di un repository.

È un caso limite, ma Mercurial lo gestisce correttamente.

+1

Il problema con questo hook è che i comandi mq che creano commit temporanei (qnew, qpush, ecc.) Generano un push. Usare l'hook post-commit potrebbe essere un'idea migliore. – hwiechers

+0

@hwiechers: puoi dare un esempio di come scrivere un hook post-commit? – max

+10

@max: invece di usare 'commit.autopush = hg push' fai' post-commit.autopush = hg push'. L'hook post-commit viene eseguito dopo il completamento del comando di commit. L'hook di commit viene eseguito ogni volta che viene creato un changeset nel repository locale. Vedi http://linux.die.net/man/5/hgrc per i dettagli. – hwiechers

Problemi correlati