Инвертирование различий или исправлений || CVS diff
Вопрос
В CVS моя рабочая копия (WC) находится в определенной ветке (которую мы будем называть "foo").Были и другие изменения, внесенные в foo другим разработчиком.Я хочу провести различие между моим WC и вышестоящим состоянием foo.Обычно, работая в багажнике (HEAD), я просто делаю cvs diff , и это нормально.Но по какой-то причине при выполнении простого cvs diff в ветке diff пуст.Когда я пытаюсь использовать "cvs diff -r foo", разница отображается, но она инвертирована - добавления вверх по потоку показаны с минусами, а удаления вверх по потоку показаны с плюсами.
Как я могу либо:(1) заставить CVS отличаться "другим способом" (плюс для вышестоящих дополнений) или (2) инвертировать патч (в целом)?
Решение
Если основная цель этого - проверить, "как дела" в центральном репозитории, я предлагаю вам обзавестись функциональным средством просмотра 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
Другие советы
возможно, то, что вы хотите, можно сделать, используя interdiff из пакета patchutils.
Я часто использую его таким образом, чтобы увидеть, что изменилось в магистрали для данного файла:
cvs diff -up -r1 givenfile | interdiff /dev/stdin /dev/null
Вы можете попробовать экспортировать файл из ветки в какой-нибудь временный файл, а затем сделать различие между вашей рабочей копией и этим временным файлом.Кажется, это самый простой способ.