2011-01-19 6 views
26

Supponendo che ho un foo ramo chiamato con due commit a, b:Come mostrare il diff specifica ad un ramo chiamato in mercuriale

 a  b  c 
------o-------o-------o------- # default 
     \   d   e 
     ----------o---------o # branch foo 

voglio vedere la diff tra A ed E (un non incluso). Ovviamente potrei usare l'id di revisione, ma non è molto pratico. In git, si può semplicemente fare git diff master..foo. Come posso fare lo stesso in hg?

risposta

33

È possibile farlo utilizzando revsets.

Nel tuo esempio specifico penso che si potrebbe ottenere un elenco di di soli d e e utilizzando:

hg log -r "branch('foo') - branch('default')" 

dove che - è definito come:

"x - y" 
     Changesets in x but not in y. 

Ottenere il diff da un a e potrebbe essere fatto come:

hg diff -r "ancestor(default, foo)" -r foo 

anche se forse c'è una scorciatoia per quello che non vedo.

+0

Grazie, questo almeno dare un modo per farlo automaticamente. Ma sono un po 'perplesso dal ramo dei predicati (foo). hg log -r "branch (foo)" fa quello che voglio, bug hg diff -r "branch (foo)" no. Sai perché ? –

+1

Perché filtra solo tutti i changeset di quel predicato. "branch (foo)" restituirebbe (d, e) che è relativamente privo di significato in questo contesto. – Ringding

+2

La sintassi corretta sembra essere: 'hg log -r" branch ('foo') - branch (predefinito) "' –

12

Un altro modo per fare questo, utile anche per i rami che si è già fuse per default è:

hg diff -r "max(ancestors(foo) and branch(default)):foo" 

Anche se questo può essere un pozzo di un dolore, quindi consiglio la creazione di un alias l'aggiunta di qualcosa di simile a:

[alias] 
branchdiff = diff -r "max(ancestors('$1') and branch(default)):'$1'" 

Per il tuo Mercurial.INI/hgrc che è possibile utilizzare in questo modo:

hg branchdiff <branch name> 

o

hg branchdiff . 
+0

Questo codice è sorprendente. – n0nag0n

+0

Sarebbe bello vedere una spiegazione di come esattamente HG ottiene il risultato desiderato con questo revisore '" max (antenati (pippo) e ramo (predefinito)): pippo "'. – szalski

1

Se volete registri dal ramo corrente solo:

hg log -b.

0

diff tra i rami:

hg diff -r <branchname_1>:<branchname_2>

show di ramo corrente ultima commit:

hg log -r .

Problemi correlati