Inversione un diff o una patch || CVS diff
Domanda
In CVS, la mia copia di lavoro (WC) è in un certo ramo (che chiameremo "foo"). Ci sono stati altri cambiamenti controllato in pippo da un altro dev. Voglio fare un diff tra il mio WC e lo stato a monte del foo. Normalmente, quando si lavora in tronco (HEAD), ho solo fare un diff cvs, e va bene. Ma per qualche ragione quando si fa un diff cvs pianura nel ramo, il diff è vuoto. Quando si tenta di utilizzare "cvs diff -r foo", il diff presenta, ma è invertita -. Aggiunte a monte sono indicati con svantaggi, e rimozioni upstream vengono mostrati con vantaggi
Come posso neanche: (1) ottenere CVS per diff "dall'altra parte" (più per le aggiunte a monte), o (2) invertire una patch (in generale)
Soluzione
Se lo scopo principale di questo è quello di verificare "cosa succede" nel repository centrale, ti suggerisco di ottenere voi stessi un visualizzatore di CVS / browser / thingy web funzionale dove è possibile sfogliare e vedere le ultime modifiche prima di aggiornare. Ma supponendo che tutto quello che hai è da riga di comando CVS, cercherò di dare una soluzione in ogni caso:)
Quindi, quello che abbiamo qui è un foo
ramo che andava da A
-> B
, dove B
è lo stato del ramo (sul server), dopo il check-in di l'altro sviluppatore, e A
è lo stato dell'ultimo aggiornamento il vostro lavoro copiare.
Quando solo facendo un cvs diff
pianura in questa situazione, vedrete le modifiche locali rispetto al A
dal A
è quello che avete verificato. Lo Stato CVS locale vi mostrerà che ogni file viene dal Una revisione sul ramo foo, e quando il vostro cliente diffing CVS scaricherà che la revisione dal server. Nel tuo caso Sto indovinando non si hanno modifiche locali dal tuo cvs diff
è vuoto.
Poi, quando si esegue una cvs diff -r foo
stai diffing tua A
locale (o A + modifiche) contro foo
del server (che attualmente è al B
) - e le modifiche necessarie per ottenere da B
del server al vostro A+changes
è esattamente l'opposto di check-in dell'altro sviluppatore, più le proprie modifiche locali.
Ora, se davvero vuole veramente sapere come B (o la punta-di-foo) a fronte di un (la versione incontaminata di tutto ciò che attualmente hanno verificato), quello che io penso che si debba fare è impostare un tag su la vostra copia di lavoro, quindi diff che modifica contro lo stato del ramo. Qualcosa di simile a questo:
cvs tag pistos_temp1
cvs diff -r pistos_temp1 -r foo
# And clean up by deleting the tag afterwards:
cvs tag -d pistos_temp1
Altri suggerimenti
forse ciò che si vuole può essere fatto utilizzando interdiff dal pacchetto patchutils.
Io uso spesso questo modo di vedere cosa è cambiato sul tronco di un dato file:
cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null
Si può provare a esportare un file dal ramo a qualche file temporaneo e poi fare diff tra vostra copia di lavoro e questo file temporaneo. Sembra essere il modo più semplice.