Как найти полезный код, ранее удаленный, но все еще сохраненный в системе контроля версий? - PullRequest
8 голосов
/ 25 апреля 2010

Всякий раз, когда кто-то спрашивает, что делать с кодом, который больше не нужен, ответ обычно "удалить его, восстановить его из системы контроля версий, если он вам нужен" .

Теперь, как мне найти этот фрагмент исходного кода в хранилище? Давайте для простоты ограничим область применения SVN - я подозреваю, что использование любой другой системы контроля версий не будет иметь большого значения в этом аспекте (поправьте меня, если я ошибаюсь).

Если я удаляю этот код и фиксирую изменения, он больше не будет в последней ревизии. Как найти его, не экспортируя каждую ревизию и не выполняя тщательный поиск (что практически невозможно)?

Ответы [ 6 ]

5 голосов
/ 25 апреля 2010

Вам нужно использовать инструмент разницы, у большинства svn-репозиториев они есть. Щелкните правой кнопкой мыши по файлу, который вы хотите откатить, и выберите «diff» или «Разница» или аналогичные (расходы на реализацию), а затем он попросит сравнить текущую версию с более ранней версией - если вы знаете приблизительную дату более ранней версии затем выберите эту версию (отметки даты / времени обычно очевидны), и вы увидите две версии рядом. Затем вы можете выбрать, какие биты различаются (обычно окрашены в красный цвет), щелкните правой кнопкой мыши на них и выберите их для интеграции.

Клиентский инструмент, который вы используете для SVN, определит детали.

4 голосов
/ 25 апреля 2010

Другой способ - поиск в журнале сообщений - вы, вероятно, оставили комментарий несколько следующим образом:

Удалена функциональность XYZ

когда вы внесли изменение.

3 голосов
/ 25 апреля 2010

Самый правильный ответ: ты не можешь. Существуют методы, которые помогут вам с этой задачей, но это невозможно сделать автоматически, потому что:

  • вы не знаете, в каких файлах он находится
  • вы не знаете исходный код или его части
  • вы не можете вспомнить, когда произошло удаление кода.
  • ...

Компьютер не может читать наши мысли. Тем не менее, есть, конечно, другие инструменты, которые помогают вам, такие как упомянутые, или графические интерфейсы, такие как trac (который мне очень нравится для этой цели).

3 голосов
/ 25 апреля 2010

Я делаю это, думая о дате, когда я знал, что отсутствующий код активен, и извлекаю все дерево исходных текстов, как это было в тот день. Если я неправильно опишу дату, я пойду x день / недели / месяцы с обеих сторон, пока я не сконцентрируюсь на ней.

svn checkout --revision {2002-02-17}
2 голосов
/ 25 апреля 2010

Предположительно, комментарии к коду или комментарии к редакции содержат ключевые слова для целевого фрагмента кода, который вы ищете:

SVN Query - http://svnquery.tigris.org/

"SvnQuery - это быстрый полнотекстовый поисковый механизм для репозиториев Subversion. Он ищет каждый файл в каждой ревизии. Индексируется не только содержимое файла , но и его полные метаданные как путь, автор, комментарии и свойства. Предоставляется простой, похожий на Google веб-интерфейс, но ожидается, что библиотека запросов и механизм индексации могут быть повторно использованы в других интерфейсах. например, веб-сервис или плагин Visual Studio.

SvnQuery реализован в C # 3.0, а ASP.NET используется для веб-интерфейса. Полнотекстовый поиск осуществляется Lucene.Net, который обеспечивает потрясающую производительность. ... "

Язык запросов описан здесь:
http://svnquery.tigris.org/servlets/ProjectProcess?pageID=o0dpdE&freeformpage=SvnWebQueryHelp

0 голосов
/ 24 августа 2012

Я подозреваю, что использование любой другой системы контроля источников не будет иметь большого значения в этом аспекте (поправьте меня, если я ошибаюсь).

Это неправильно.Распределенное управление версиями (например, git или hg) может сделать это относительно эффективно.

В git, например, чтобы найти удаленную функцию с именем foo, вы можете сделать git log -S foo, которая покажет все коммиты, которые добавляют илиудалите строки, содержащие «foo».

Если по какой-то причине вы хотите придерживаться произвольного ограничения SVN, сначала клонируйте SVN-репозиторий с помощью git-svn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...