Я хотел представить diff для обзора, для проекта с открытым исходным кодом.
Я получил код с помощью SVN (из терминала, Ubuntu). И я сделал небольшие изменения в нескольких файлах. Теперь есть только одно изменение, которое я хочу отправить. Остальные изменения, которые я сделал, были для отладки и больше не требуются.
Я создал diff, используя svn di > ~/os/firstdiff.diff
Итак, мой вопрос, как отменить мои локальные изменения?
Есть ли SVN способ сделать это? Если нет, мне придется перейти к каждому файлу и удалить все свои правки. Затем я сгенерирую новый diff и отправлю его.
Вам нужно отменить все изменения с помощью команды svn revert :
svn revert foo.c
svn revert --recursive .
источник
svn revert --recursive .
мне очень помогает .--recursive
параметр отменяет любые локальные изменения, и это вопрос.Чтобы отменить локальные изменения в одном конкретном файле:
Чтобы отменить локальные изменения в одной конкретной папке:
источник
Простого
svn revert
было достаточно для оригинального постера. Тем не менее, простойsvn revert
не будет делать в более общем случае, когда выПредложение @ ErichBSchulz об использовании
git add -p
очень разумно и гораздо более применимо в таком случае. В ответе просто не хватало некоторых деталей. Предполагая, что ваш текущий каталог - это каталог, который вы хотите сделать совместимым патчем, вы можете сделать что-то вроде этого:Оформить первоначальную версию из Subversion в другой каталог (выберите имя каталога, который не существует, здесь, используя подкаталог
TMP/
).Используя эту нетронутую проверку svn в качестве основы, запустите git-репозиторий, игнорируя каталоги .svn; передайте все в svn head в ваш временный git-репозиторий
Скопируйте недавно подготовленные метаданные git-репозитория в исходный рабочий каталог; поскольку каталог для извлечения нетронутой Subversion не нужен, вы можете избавиться от него. Ваш рабочий каталог теперь является как git, так и subversion:
Теперь вы можете использовать мощные и удобные средства
git add -p
для интерактивного выбора именно того, чем вы хотите поделиться, и отправки их в свой git-репозиторий. Если вам нужно добавить файлы в коммит, сделайте такжеgit add <file-to-add>
передgit commit
Используя коммит, подготовьте патч, которым вы хотите поделиться. Для этой цели вы также можете использовать
git diff HEAD^..HEAD
илиgit format-patch
(последний может использоваться для непосредственной подготовки электронных писем для отправки, содержащих исправление или несколько исправлений):Чтобы избавиться от метаданных git, просто сделайте
rm -rf .git/
. Если вы планируете продолжить взлом с использованием исходного рабочего каталога, вы можете продолжить использовать егоgit
для управления локальными изменениями. В этом случае вы, вероятно, выиграете от инвестиций в обучение использованиюgit svn
.Примечание: если вы знакомы с
git
этим, довольно просто импровизировать. В противном случае это выглядит, возможно, немного грязно. Вы можете обобщить подход, написав скрипт из этих шагов для реализации «интерактивного коммита» или «интерактивного создания патча» для svn, который можно использовать без какого-либо понимания git.источник
Вы могли бы использовать
При публикации различий не забывайте указывать ревизию, относительно которой вы разыгрываете.
Как ответили другие, вы также можете использовать
svn revert
осторожно. Это зависит от того, хотите ли вы сохранить свои локальные изменения для будущей работы или нет ...источник
revert
мои изменения все время. Так что я бы использовал ваш путь в будущем.Перейдите в корень этого репозитория и выполните следующую команду
источник
svn revert -R .
может быть корочеВы можете использовать команду commit для файла, который вы хотите поместить, и использовать команду svn revert, чтобы отменить оставшиеся локальные изменения
источник