Как сделать svn diff создать файл, который будет применяться патчем, когда были использованы svn cp или svn mv?
Сценарий:
- svn cp или mv некоторый файл
- изменить этот файл
- svn diff > mypatch
На другой машине (той же рабочей копии, но без изменений):
- Попробуйте применить mypatch.
- Сбой → пытается изменить неиспользуемый файл.
Как я могу заставить svn diff создавать патч-патч-патч или чистить патч, созданный svn diff в этом случае? Я не могу совершить. Я хотел бы сохранить mergeinfo (потому что очевидным обходным путем является добавление файла как совершенно нового, без подключения к предыдущему).
Ответы
Ответ 1
С subversion вы можете указать, какой diff-бинарный использовать, и параметры, которые нужно передать ему. См. руководство по svn diff.
Вы хотите создать обычный файл патча из svn diff, поэтому вам нужно, чтобы svn diff выглядел как обычный diff. Попробуйте следующее:
svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch
...
patch -p0 < mypatch
Доказательство концепции:
echo "newline" >> README.txt
svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch
cp README.txt README.txt.patched
svn revert README.txt
patch -p0 < mypatch
diff README.txt README.txt.patched
Нет разницы в двух файлах после исправления.
Ответ 2
Если вы хотите избавиться от свойств svn, а также в своих исправлениях, есть опция для этого:
svn diff --patch-compatible > mypatch.diff
svn help diff
говорит:
--patch-compatible : generate diff suitable for generic third-party
patch tools; currently the same as
--show-copies-as-adds --ignore-properties
Патчи, созданные таким образом, должны быть совместимы с старой доброй утилитой patch
.
Ответ 3
Вы пробовали вариант --show-copies-as-adds
, упомянутый на веб-странице svn diff и описанный на svn options страница.
Ответ 4
Не понимая конкретного сценария, вы пытаетесь понять, почему вы хотите это сделать. Я чувствую, что вы пытаетесь сделать контролируемые изменения в изолированной среде, чтобы не влиять на других пользователей/приложений.
Не удалось решить эту проблему:
- Создайте ветвь для изменения кода
- Выполните свою копию/перемещение и изменения в ветке
- Попросите другую сторону переключиться на эту новую ветвь кода и продолжить совместное использование этой ветки
Когда вы оба согласились с изменениями, сходите обратно в trunk, используя аргумент --reintegrate и rm ветвь?
Это
* Поддерживать слияние-info
* Определите копию/перемещение и изменения в управлении версиями
* Все еще изолировать изменения от других пользователей
* Не допустил бы неполные изменения во время шага 2, поскольку вы могли бы просто добавить дополнительные изменения и обновить