Инвертирование разницы или патча || CVS diff

В CVS моя рабочая копия (WC) находится в определенной ветке (которую мы назовем «foo»). Были и другие изменения, внесенные в foo другим разработчиком. Я хочу провести различие между моим WC и исходным состоянием foo. Обычно, работая в стволе (HEAD), я просто делаю cvs diff, и это нормально. Но по какой-то причине при выполнении простого cvs diff в ветке diff пуст. Когда я пытаюсь использовать "cvs diff -r foo", появляется различие, но оно инвертировано - добавления в восходящем направлении отображаются с минусами, а удаления с восходящего потока - с плюсами.

Как я могу: (1) заставить CVS различать «в другую сторону» (плюс для апстрима) или (2) инвертировать патч (в общем)?


person Pistos    schedule 08.12.2009    source источник


Ответы (3)


Если основная цель этого - проверить, «что происходит» в центральном репо, я предлагаю вам приобрести функциональную программу просмотра CVS / браузера / Интернета, в которой вы можете просматривать и видеть последние изменения перед обновлением. Но если предположить, что все, что у вас есть, это CVS из командной строки, я все равно попытаюсь дать вам решение :)

Итак, у вас есть ветка foo, которая пошла от A -> B, где B - это состояние ветки (на сервере) после регистрации другого разработчика, а A - это состояние, до которого вы в последний раз обновляли свою рабочую копию.

Если просто выполнить простой cvs diff в этой ситуации, вы увидите свои локальные изменения по сравнению с A, поскольку A - это то, что вы проверили. Локальное состояние CVS покажет, что каждый файл исходит из ревизии A ветви foo, и при различении ваш клиент CVS загрузит эту ревизию с сервера. В вашем случае я предполагаю, что у вас нет локальных изменений, так как ваш cvs diff пуст.

Затем, когда вы делаете cvs diff -r foo, вы сравниваете свой локальный A (или изменения A +) с foo сервера (который в настоящее время находится на B) - и изменения, необходимые для перехода от B сервера к вашему A+changes, прямо противоположны регистрация другого разработчика, плюс ваши собственные локальные изменения.

Теперь, если вы действительно хотите знать, как B (или tip-of-foo) сравнивается с A (нетронутой версией того, что вы в настоящее время проверили), то, что, я думаю, вам нужно сделать, это установить тег в своей рабочей копии , затем сравните этот тег с состоянием ветки. Что-то вроде этого:

cvs tag pistos_temp1
cvs diff -r pistos_temp1 -r foo
# And clean up by deleting the tag afterwards:
cvs tag -d pistos_temp1
person olsner    schedule 08.12.2009
comment
Мы используем viewvc, но не можем понять, как заставить его хорошо работать с ветвями. Он работает плавно только с материалом HEAD. В любом случае, ваше решение для временных тегов работает нормально, даже если оно немного запутанное (по сравнению с решениями, не относящимися к CVS). Спасибо. - person Pistos; 09.12.2009

возможно, то, что вы хотите, можно сделать с помощью interdiff из пакета patchutils.

Я часто использую его таким образом, чтобы увидеть, что изменилось в TRUNK для данного файла:

cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null
person andreas    schedule 01.03.2012
comment
От man 1 interdiff: To reverse a patch, use /dev/null for diff2. Это помогло, спасибо. :) - person selurvedu; 20.07.2016

Вы можете попробовать экспортировать файл из ветки во временный файл, а затем провести различие между вашей рабочей копией и этим временным файлом. Кажется, это самый простой способ.

person corvus    schedule 08.12.2009
comment
Это один способ, да, но, безусловно, есть способ лучше. :) Я назову это Plan C. - person Pistos; 08.12.2009