Можно ли сравнить старый экспортированный набор файлов с хранилищем Subversion? - PullRequest
2 голосов
/ 23 декабря 2008

Вот проблема: у нас все наши разработки находятся в подрывной деятельности, но наши бета-версии - это просто биты из экспортированных файлов, которые не были помещены туда одновременно. Или, другими словами, мы вносим изменения в версионные файлы, а затем, когда мы думаем, что мы счастливы, мы вручную экспортируем их, просто копируя их в другой каталог.

Что ж, нам бы хотелось, чтобы все работы управлялись Subversion, а бета-версия была простой рабочей копией головки ствола. Я знаю, что могу начать с заголовка ствола и просто откатывать определенные области до тех пор, пока не доберусь до тех же файлов, но было бы неплохо узнать, к какой ревизии требуется откатить каждый файл.

Существует ли такой инструмент, который будет брать набор файлов / каталогов и сравнивать его с хранилищем, предоставляя номера ревизий для каждого файла / каталога? Если нет, то как мне собрать сценарий для этого?

Ответы [ 5 ]

1 голос
/ 23 декабря 2008

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

Subversion имеет понятие "копии каталога", которые являются легковесными и не занимают много места в хранилище вообще.

Как правило, если вы используете часто используемую компоновку тегов / branch / trunk, то вы сделаете копию своего транка в новую подпапку вашего каталога тегов, когда вы отпустите что-либо.

Таким образом, вам не нужно будет пытаться выяснить, какой версией был каждый файл после факта, Subversion будет отслеживать его для вас.

Это почти то же самое, что сказать: «Я знаю, что я загнал свою машину в каменную стену, но не могли бы вы помочь мне собрать машину?». Ответ, конечно, состоит в том, чтобы с самого начала не въезжать в каменную стену.

Насколько мне известно, в Subversion нет функции, которая сообщала бы вам, какой версии каждого файла выглядят ваши файлы на диске, поэтому либо вы создаете несколько сценариев, которые проверяют версию для каждой версии файла, или вы делаете это вручную.

О, и да, избегайте вбивать в себя эту каменную стену в будущем.

0 голосов
/ 22 мая 2009

забудьте SharpSVN, есть привязки perl и python, которые также работают, или вы можете просто использовать командную строку svn в bash. Вы сказали сценарий в конце концов.

Если вы используете командную строку, вам нужно найти в дереве каталогов эквивалентный файл, а затем использовать команду svn log, чтобы получить список номеров ревизий для отдельного файла; вам также нужно, чтобы команда svn diff (используя опцию -r) сравнивала ваш файл с ревизией в репозитории.

Я бы распечатал все подходящие пути и номера ревизий и вручную их убрал (на случай, если у вас есть дубликаты!), Но вы бы хотели, чтобы команда svn cp сделала ветвь контролируемого файла в новом каталоге .

0 голосов
/ 22 мая 2009

Я хотел бы расширить ответ Сандера выше и довести до конца.

Создайте инструмент, используя библиотеки SharpSvn, которые следуют следующему алгоритму.

FOR EACH of the exported files
  ITERATE backwards through the revisions of that file
  IF the revisioned file matches your exported copy
    SVN COPY that revisioned file to another branch

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

0 голосов
/ 14 мая 2009

Вы можете попробовать написать инструмент для этого, используя SharpSvn . Тем не менее, ваша задача - выяснить, какой URL-адрес хранилища соответствует вашему файлу. После этого вы можете просто извлечь журнал, и для каждой ревизии журнала этого файла вызовите diff, чтобы проверить, отличается он или нет.

Опять же, я думаю, что самая большая проблема, которую вам нужно решить, - это найти URL Subversion для каждого файла

0 голосов
/ 23 декабря 2008

Ах да! "Frankenversions"!

Здесь я бы рекомендовал систему управления сборкой, например CruiseControl или Hudson . Эти системы будут создавать тег (копию) каждой сборки, которую они делают, так что вы можете быть уверены, что все, что соответствует одной из ваших сборок, имеет версионную версию.

Мне нравится добавлять код в мои скрипты сборки, чтобы даже брать номер сборки из CruiseControl и помещать их в мои сборки (например, мои файлы "about", мои метаданные сборки и т. Д.). Это облегчит вам перекрестную ссылку на ваше действующее программное обеспечение с тем, что есть в SVN.

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