2 Stimmen

Invertieren eines Diffs oder Patches || CVS diff

In CVS befindet sich meine Arbeitskopie (WC) auf einem bestimmten Zweig (den wir "foo" nennen). Ein anderer Entwickler hat andere Änderungen in foo eingecheckt. Ich möchte einen Vergleich zwischen meiner WC und dem Upstream-Status von foo durchführen. Normalerweise, wenn ich im Stamm (HEAD) arbeite, mache ich einfach einen cvs diff, und das ist in Ordnung. Aber aus irgendeinem Grund, wenn ich einen einfachen cvs diff im Zweig mache, ist der diff leer. Wenn ich versuche, "cvs diff -r foo" zu verwenden, wird das Diff angezeigt, aber es ist invertiert - Upstream Hinzufügungen werden mit Minuszeichen und Upstream Entfernungen mit Pluszeichen angezeigt.

Wie kann ich entweder: (1) CVS dazu bringen, in die "andere Richtung" zu diffundieren (plus für Upstream-Ergänzungen), oder (2) einen Patch invertieren (im Allgemeinen)?

3voto

andreas Punkte 31

Vielleicht kann das, was Sie wollen, mit interdiff aus dem Paket patchutils erreicht werden.

Ich verwende es oft, um zu sehen, was sich im TRUNK für eine bestimmte Datei geändert hat:

cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null

2voto

olsner Punkte 951

Wenn der Hauptzweck darin besteht, zu überprüfen, was im zentralen Projektarchiv "in" ist, schlage ich vor, dass Sie sich einen funktionierenden CVS-Viewer/Browser/Web-Dingsbums besorgen, mit dem Sie die letzten Änderungen vor der Aktualisierung sehen können. Aber angenommen, Sie haben nur ein Kommandozeilen-CVS, werde ich trotzdem versuchen, Ihnen eine Lösung zu geben :)

Es handelt sich also um eine Verzweigung foo die sich von A -> B donde B ist der Zustand des Zweigs (auf dem Server) nach dem Einchecken des anderen Entwicklers, und A ist der Zustand, auf den Sie Ihre Arbeitskopie zuletzt aktualisiert haben.

Wenn Sie nur eine einfache cvs diff In diesem Fall werden Sie Ihre lokalen Änderungen sehen im Vergleich zu A seit A ist das, was Sie ausgecheckt haben. Der lokale CVS-Status zeigt an, dass jede Datei aus der A-Revision des foo-Zweigs stammt, und beim Diffing wird Ihr CVS-Client diese Revision vom Server herunterladen. In Ihrem Fall vermute ich, dass Sie keine lokalen Änderungen haben, da Ihr cvs diff leer ist.

Dann, wenn Sie eine cvs diff -r foo Sie diffundieren Ihr lokales A (oder A+Änderungen) gegen den Server foo (die sich derzeit auf B ) - und die Änderungen, die erforderlich sind, um vom Server B zu Ihrem A+changes ist genau das Gegenteil von dem, was der andere Entwickler eingecheckt hat, plus Ihre eigenen lokalen Änderungen.

Wenn Sie nun wirklich wissen wollen, wie B (oder tip-of-foo) im Vergleich zu A (der ursprünglichen Version dessen, was Sie gerade ausgecheckt haben) aussieht, müssen Sie meiner Meinung nach ein Tag auf Ihrer Arbeitskopie setzen und dieses Tag dann mit dem Zustand des Zweigs vergleichen. Etwas wie dies:

cvs tag pistos_temp1
cvs diff -r pistos_temp1 -r foo
# And clean up by deleting the tag afterwards:
cvs tag -d pistos_temp1

0voto

corvus Punkte 2280

Sie können versuchen, eine Datei aus dem Zweig in eine temporäre Datei zu exportieren und dann einen Vergleich zwischen Ihrer Arbeitskopie und dieser temporären Datei durchzuführen. Das scheint der einfachste Weg zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X