Usando Mercurial, c'è un modo semplice per diffondere la mia copia di lavoro con il file di punta nel repository remoto predefinito

StackOverflow https://stackoverflow.com/questions/156280

Domanda

Quando uso mercurial, vorrei poter diffondere la copia di lavoro di un file con il file di punta nel mio repository remoto predefinito. C'è un modo semplice per farlo?

So di poter fare un " hg incoming -p " per vedere i patch set di modifiche in arrivo, ma sarebbe bello vedere direttamente le modifiche effettive per un determinato file che otterrei se faccio un pull delle ultime cose (o cosa potrei fare per mettere push out).

La cosa più semplice a cui riesco a pensare in questo momento è creare un piccolo script che dia un'occhiata alla posizione predefinita in .hg / hgrc e scarica il file usando curl (se è su http, altrimenti scp su ssh, o fai un diff diretto se si trova sul file system locale) e poi per diff la copia di lavoro o il suggerimento contro quella copia temporanea.

Sto cercando di vendere mercuriale al mio team e uno dei membri del mio team lo ha presentato oggi come qualcosa che sono in grado di fare facilmente in SVN con i loro strumenti della GUI.

È stato utile?

Soluzione

Dopo alcuni scavi, mi sono imbattuto nella estensione Rdiff che fa la maggior parte di ciò che Lo voglio.

Non viene fornito con mercurial, ma può essere installato clonando il repository:

hg clone http://hg.kublai.com/mercurial/extensions/rdiff 

E poi modificando il tuo file ~ / .hgrc per caricare l'estensione:

[extensions] 
rdiff=~/path/to/rdiff/repo/rdiff.py

È un po 'eccentrico in quanto modifica effettivamente l'attuale "hg diff" comando rilevando se il primo parametro è un URL remoto. In tal caso, il file verrà diffuso rispetto al file di punta nel repository locale (non nella copia di lavoro). Questo perché il repository remoto è il primo degli argomenti, è il contrario di quello che mi aspetterei, ma puoi passare " - reverse " al comando hg diff per cambiarlo.

Potevo vedere questi potenziali miglioramenti dell'estensione, ma per ora posso aggirarli con una funzione shell bash / zsh nel mio file di avvio. Fa un check-in temporaneo della mia copia di lavoro (trattenuta dalla transazione mercuriale in modo che possa essere ripristinata), esegue il diff inverso e quindi ripristina la transazione per riportare le cose nel modo in cui erano:

hgrdiff() {
    hg commit -m "temp commit for remote diff" && 
    hg diff --reverse http://my_hardcoded_repo $* &&
    hg rollback      # revert the temporary commit
}

E poi chiamalo con:

hgrdiff <filename to diff against remote repo tip>

Altri suggerimenti

Potresti provare ad avere due repository localmente: uno per le cose in entrata e uno per quelle in uscita. Quindi dovresti essere in grado di fare diff con qualsiasi strumento. Vedi qui:

http://weblogs.java.net/blog /kohsuke/archive/2007/11/using_mercurial.html

per espandere il metodo Lars (per qualche ragione il commento non funziona), puoi usare l'opzione -R sul comando diff per fare riferimento a un repository locale. In questo modo puoi usare la stessa applicazione diff che hai specificato in hg

Utilizzando i modelli è possibile ottenere un elenco di tutti i file modificati:

hg incoming --template {files}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top