Ответ 1
Просто используйте команду svn revert
, например:
svn revert some_file.php
Он (как и любая другая команда svn) хорошо документирован в ресурсе svnbook или справочной странице или даже с помощью команды svn help
.
Я хочу отправить diff для просмотра для проекта с открытым исходным кодом.
Я получил код, используя SVN (из терминала, Ubuntu). И я сделал небольшие изменения в нескольких файлах. Теперь есть только одно изменение, которое я хочу представить. Остальные изменения, которые я сделал, были в основном для отладки и больше не требуются.
Я создал diff с помощью svn di > ~/os/firstdiff.diff
Я еще не использовал никакой другой команды SVN, кроме svn update
, до этого.
Итак, мой вопрос, Как отменить мои локальные изменения?
Есть ли способ SVN для этого? Если нет, мне придется перейти к каждому файлу и удалить все мои изменения. Затем я создам новый diff и отправлю его.
Просто используйте команду svn revert
, например:
svn revert some_file.php
Он (как и любая другая команда svn) хорошо документирован в ресурсе svnbook или справочной странице или даже с помощью команды svn help
.
Вам нужно вернуть все изменения, используя команду 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
является очень разумным и гораздо более общеприменимым в этом случае. В ответе просто не хватало деталей. Предполагая, что ваш текущий каталог - это каталог, в который вы хотите сделать патч, вы можете сделать что-то вроде этого:
Проверьте оригинальную версию из подрывной программы в другой каталог (выберите имя каталога, которого не существует, здесь используйте подкаталог TMP/
).
$ url=$(svn info . | awk '/^URL/ {print $2}')
$ svn checkout "$url" TMP
Используя эту первоначальную проверку svn в качестве основы, запустите репозиторий git, игнорируя каталоги .svn; передать все в svn head в ваш временный репозиторий git
$ cd TMP
$ git init && echo ".svn/" > .gitignore
$ git add -A && git commit
$ cd ..
Скопировать готовые метаданные репозитория git в исходный рабочий каталог; так как нетронутый каталог проверки подрывной деятельности не нужен, вы можете избавиться от него. Теперь ваш рабочий каталог представляет собой 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
, это довольно тривиально, чтобы импровизировать. В противном случае это выглядит немного грязно. Вы можете обобщить подход, написав script из этих шагов, чтобы реализовать "интерактивную фиксацию" или "создание интерактивных патчей" для svn, которые можно было использовать без какого-либо понимания git.
Вы можете использовать
svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff
При публикации своего diff не забудьте указать версию, против которой вы работаете.
Как и другие, вы также можете использовать svn revert
осторожно. Это зависит от того, хотите ли вы сохранить свои локальные изменения для своей будущей работы или нет...
Перейдите в корень этого репозитория и выполните следующую команду
svn revert --depth=infinity .
Вы можете использовать команду commit в файле, который хотите поместить, и использовать команду svn revert для отказа от оставшихся локальных изменений
Используйте Git!
git add -p
дает вам интерактивную возможность выбора изменений для фиксации.