Как я могу зафиксировать файл в SVN, который я забыл зафиксировать некоторое время назад (настраивая его номер версии)

Итак, я с радостью использую Subversion для регулярной фиксации файлов в моем стеке проектов, связанных с моим массивным решением Visual Studio.

Я решил однажды сделать экспорт в svn и решил, что мне нужно посмотреть, как работает мой проект, еще в октябре 2008 года. Итак, я экспортирую в свою локальную файловую систему, ревизия 37.

Когда я собирался скомпилировать проект, в октябре почему-то было два или три файла, которые упустили из виду. Допустим, они не были зафиксированы до 99-й версии или, что еще лучше, они все еще не зафиксированы.

Есть ли способ настроить номер фиксации в файле так, чтобы он соответствовал правильной ревизии , которую вы хотели, чтобы он был? Таким образом, если я реэкспортирую 37-ю ревизию, я получу правильное и работающее решение в Visual Studio?


person Bkwdesign    schedule 29.05.2009    source источник
comment
Спасибо всем за полезный отзыв. Это то, чего я боялся, будет ответом. Хотя это имеет смысл.   -  person Bkwdesign    schedule 01.06.2009
comment
FWIW - Что касается «большей осторожности в будущем», мне очень понравилось использовать AnkhSVN в моей Visual Studio 2010. Он отлично справился со своей задачей, помогая мне совершать идеальные коммиты.   -  person Bkwdesign    schedule 03.06.2011


Ответы (5)


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

Что вы можете сделать, так это создать ответвление от версии 37 и внести в нее изменения. Это создаст новую ревизию, скажем 100. Затем вы можете зафиксировать ее, и у вас будет измененная ревизия 37, которую вы ищете.

person Matt Brunell    schedule 29.05.2009

Это возможно, но от вас требуется не быть слабонервным, знать формат дампа репозитория SVN и иметь твердую руку (и резервные копии).

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

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

Это также не рекомендуется; просто зафиксируйте файлы сейчас и будьте осторожнее в будущем.

person ASk    schedule 29.05.2009

Нет, это невозможно. Вы не можете изменить историю.

Если бы можно было сделать то, о чем вы просите, это нарушило бы всю концепцию контроля версий: наличие надежной истории ваших коммитов.

person Stefan    schedule 29.05.2009

Похоже, это невозможно.

Вы можете попробовать взять два файла из более поздней версии и использовать их вместо них (с файлами из версии 37).

person Peter Stuifzand    schedule 29.05.2009

Похоже, вам все равно, что это была ревизия 37. Скорее, вы пытаетесь повторно экспортировать ревизию с определенным реальным свойством (то есть, ревизия 37 оказалась той, которую вы дали своему клиенту).

Как сказал Мэтт, вы действительно хотите создать ветку из версии 37. По сути, это означает, что вы собираетесь скопировать версию 37 в каталог Subversion с именем, объясняющим, что это такое, например, / branch / client-A. Затем добавьте недостающие файлы в ветку и выполните фиксацию. Затем вы можете экспортировать из / branch / client-A, чтобы получить то, что хотите.

person runako    schedule 29.05.2009