Перемещение папки в SVN, возникли проблемы - PullRequest
1 голос
/ 15 июня 2009

У меня есть проект на codeplex, и я пытаюсь реорганизовать древовидную структуру, чтобы она стала более понятной и с ней было легче работать.

Это мой текущий макет:

TopLevel
|-->src
   |--->ProjectA //This is where all the files are held
         |-->Core //plus three more folders 
|-->MyProject.Core
   |--->trunk
        |-->src // I want to move all the folders and files in ProjectA into here

Итак, я хочу переместить все папки и файлы в ProjectA в ProjectA.Core / Trunk / src.

Я извлекаю все дерево исходных текстов и щелкаю правой кнопкой мыши по папкам в папке ProjectA и выбираю «переместить версированные файлы сюда» в папку src, которая помечает папки в Project для удаления, но новые файлы в src по-прежнему имеют зеленый цвет. поставьте галочку рядом с ними, а не с синей кнопкой «плюс».

После того, как я зафиксировал изменения, я заглянул в браузер репозитория и увидел, что папки не были перемещены и все еще находились в папке ProjectA.

Как я могу переместить папки и файлы в этих папках в другую папку в Subversion? Без потери истории версий.

Я использую TortoiseSVN.

РЕДАКТИРОВАТЬ: Оказывается, это был кодекс, я переместил свой проект в код Google, и все работает нормально.

Ответы [ 3 ]

2 голосов
/ 15 июня 2009

Этот тип реорганизации легко осуществить с помощью клиента командной строки Subversion, что может оказаться для вас приемлемым вариантом. Вот команды, которые будут это делать (из каталога TopLevel):

svn mv src/ProjectA MyProject.Core/trunk/src/
svn ci -m "relocate ProjectA"

Вы также можете объединить обе команды в одну, используя URL-адреса в качестве источника и назначения, подробнее см. Документацию svn mv.

Я не нашел простого способа сделать подобное с TortoiseSVN, поэтому, когда мне нужно, я просто использую для этого клиент командной строки.

2 голосов
/ 15 июня 2009

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

Вот резюме: Вы должны выбрать папку и файлы, которые вы хотите переместить, и после этого щелкните правой кнопкой мыши на выделении и перетащите его правой кнопкой мыши в новое место. Вы получите контекстное меню с вопросом, хотите ли вы переместить файлы в хранилище. Это сохраняет историю. Теперь ваши старые файлы помечены для удаления, а ваши новые файлы должны быть помечены как как добавленные. (Я обнаружил, что значки состояния ... не всегда соответствуют истинному статусу). Зафиксируйте это как один коммит. Мне нравится быть разборчивым и использовать проверку на наличие изменений в корне извлеченных файлов, а затем выбрать, какие именно изменения я хочу зафиксировать, прежде чем сделать это.

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

0 голосов
/ 15 июня 2009

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

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

...