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

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

Чтобы уточнить, я хочу:

  • Переименуйте файлы, чтобы log черепахи SVN включал их предыдущую историю
    • Я знаю, что это может быть многоэтапный процесс, и я понимаю, что этот процесс будет выглядеть примерно так:
      1. Отменить изменения
      2. Переименуйте файлы правильно
      3. Вернитесь изменениями в фиксации с оригинала
        • Используя этот конкретный процесс, я не уверен, как правильно обработать шаг 3; в идеале, каждый из моих старых индивидуальных коммитов должен быть одинаковым образом записан в одни и те же файлы, но я не знаю, как это сделать. Или, возможно, я ошибаюсь, и мне действительно нужно просто взять содержимое последнего коммита и добавить его в качестве следующего коммита к этим файлам.

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

1 ответ1

0

Что касается вашего шага 3, я думаю, вы можете сделать то, что вы упомянули. Для получения отдельных коммитов требуется ветвь, хотя: разветвите свой текущий ствол, отмените перед удалением / добавлением, сделайте + совершите правильное переименование, объедините + передайте каждый интересующий транк в вашу ветку, объедините ветвь с вашим стволом. Это приведет к одному коммиту только в транке, включая все изменения, но SVN сможет различить ваши прежние коммиты во время blame и т.д.

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .