Сценарий такой:
- svn cp или mv какой-то файл
- изменить этот файл
- svn diff> mypatch
На другом компьютере (та же рабочая копия, но без изменений):
- Попробуйте применить mypatch.
- Ошибка -> пытается изменить несуществующий файл.
Как я могу заставить svn diff создавать патч, применимый к патчу, или в этом случае чисто применить патч, созданный svn diff? Я не могу совершить. Я хотел бы сохранить mergeinfo (потому что очевидный обходной путь - добавить файл как совершенно новый, без связи с предыдущим).
Ответ 1 · рейтинг 64 · Ray
С помощью 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 · рейтинг 11 · Apteryx
Если вы хотите избавиться от свойств 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 утилитой.
Ответ 4 · рейтинг -1 · Toby Jackson
Не понимая конкретного сценария, над которым вы пытаетесь работать, трудно определить, почему вы хотите это сделать. У меня такое ощущение, что вы пытаетесь внести контролируемые изменения в изолированную среду, чтобы не повлиять на других пользователей / приложения.
Не могли бы вы решить эту проблему с помощью:
- Создайте ветку для изменения вашего кода
- Выполните свое копирование / перемещение и изменения на ветке
- Попросите другую сторону переключиться на эту новую ветку кода и продолжить совместное использование этой ветки.
Когда вы оба согласились с изменениями, объединитесь обратно в ствол с помощью аргумента --reintegrate и rm ветку?
Это будет * поддерживать информацию о слиянии * определять копирование / перемещение и изменения в управлении версиями * по-прежнему изолировать изменения от других пользователей * предотвращать неполные изменения во время шага 2, которые могут быть проблемой, поскольку вы можете просто добавить больше изменений и обновить