Как отменить локальные изменения в проверке SVN?
Я хотел представить diff для обзора, для проекта с открытым исходным кодом.
Я получил код с помощью SVN (от терминала, Ubuntu). И я сделал незначительные правки в нескольких файлах. Сейчас есть только одно изменение, которое я хочу отправить. Остальные изменения, которые я сделал, были для отладки, и больше не требуется.
Я создал diff с помощью svn di > ~/os/firstdiff.diff
Итак, мой вопрос, как отбросить мои локальные изменения?
есть ли SVN способ сделать это? Если нет, мне придется перейти к каждому файлу и удалить все мои изменения.
Затем я бы сгенерировал новый diff и отправил его.
8 ответов:
просто использовать
svn revert.
вы должны отменить все изменения с помощью svn revert:
- вносите изменения в файл:
svn revert foo.c- вернуть весь каталог файлов:
svn revert --recursive .
чтобы отменить локальные изменения в одном конкретном файле:
$ svn revert example_directory/example_file.txtчтобы отменить локальные изменения в одной конкретной папке:
$ svn revert -R example_directory/
простой
svn revertбыло достаточно для оригинального плаката. Однако, простойsvn revertне будет делать в более общем случае, где вы
- есть и изменения, которые вы хотите поделиться и правки, которые вы не хотите делиться на один и тот же файл,
- есть локальные изменения, которые вы все еще заинтересованы в сохранении для вашей личной выгоды.
@ErichBSchulz предложение об использовании
git add -pочень разумно и гораздо более широко применимо в таком случае. В ответе просто не хватало некоторых деталей. Предполагая, что ваш текущий каталог-это каталог, который вы хотите сделать общим патчем, вы можете сделать что-то вроде этого:
Checkout pristine version from subversion to a different directory (выберите имя каталога, которого не существует, здесь с помощью подкаталога
TMP/).$ url=$(svn info . | awk '/^URL/ {print }') $ svn checkout "$url" TMPиспользуя эту первозданную из SVN в качестве основы, инициализации репозитория Git, игнорируя .каталоги svn; зафиксируйте все в svn head в своем временном репозитории git
$ cd TMP $ git init && echo ".svn/" > .gitignore $ git add -A && git commit $ cd ..скопируйте вновь подготовленные метаданные репозитория git в исходный рабочий каталог; поскольку первозданный каталог Subversion checkout не нужен, вы можете избавиться от него. Ваш рабочий каталог теперь является репозиторием git и subversion:
$ mv TMP/.git . $ rm -rf TMP/теперь вы можете использовать мощные и удобно
git add -pчтобы интерактивно выбрать именно то, что вы хотите поделиться, и зафиксировать их в своем репозитории git. Если вам нужно добавить файлы в фиксацию, сделайте такжеgit add <file-to-add>доgit commit$ git add -p <interactively select (and edit) the chunks you want to share> $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add} $ git commitиспользуя фиксацию, подготовьте патч, который вы хотите поделиться. Для этой цели вы также можете использовать
git diff HEAD^..HEADилиgit format-patch(последний может быть использован для непосредственной подготовки писем для отправки, содержащих патч или несколько патчи):$ git show -p HEAD > my-mighty-patch.patchчтобы избавиться от метаданных git, просто сделайте
rm -rf .git/. Если вы планируете продолжить взлом с исходным рабочим каталогом, вы можете продолжить использоватьgitдля управления локальными изменениями. В этом случае вы, вероятно, выиграете от инвестиций в обучение использованиюgit svn.Примечание: если вы знакомы с
gitэто довольно тривиальная вещь, чтобы импровизировать. В противном случае это выглядит, может быть, немного грязно. Вы можно было бы обобщить подход, написав сценарий из этих шагов для реализации "интерактивной фиксации" или "создания интерактивного патча" для svn, который можно было бы использовать без какого-либо понимания git.
вы могли бы использовать
svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diffпри публикации вашего diff не забудьте указать ревизию, против которой вы отличаетесь.
как другие ответили, вы также можете использовать
svn revertвнимательно. Это зависит от того, хотите ли вы сохранить свои локальные изменения для своей будущей работы или нет...
вы можете использовать команду commit для файла, который вы хотите поместить, и использовать команду SVN revert для удаления оставшихся локальных изменений
Comments