Удалите отсутствующие файлы в SVN при фиксации снимков - PullRequest
0 голосов
/ 20 декабря 2011

Я перехожу из StarTeam в SVN, и я решил сделать снимки каждого из наших релизов.Однако у меня возникла проблема при работе с файлами, существовавшими в ревизии 1, которые были удалены для ревизии 2.

Как зафиксировать снимки, если файлы отсутствуют?

Я попытался полностью удалить папку trunk / src / и затем заменить ее новой папкой / trunk / src /, но это, похоже, вызывает конфликты с отсутствующими файлами.Когда я svn добавляю «все», TortoiseSVN, кажется, обнаруживает, что файлы отсутствуют, и когда я фиксирую, кажется, что он пытается удалить отсутствующие файлы, но, похоже, не удается. Предположительно, это происходит потому, что он пытается удалить каталоги после удаления файловв этом каталоге?

Я получаю следующую ошибку:

deleting C:\trunk\src\myfile.h  // this one's okay
deleting C:\trunk\src\res
Commit failed (details follow):
Directory 'C:\trunk\src\res' is out of date
Item '/trunk/src/res' is out of date
You have to update your working copy first.

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

Спасибо!

Старый (неясный) пост: Миграция в SVN, путаница при удалении старых файлов

Изменить:

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

Ответы [ 5 ]

3 голосов
/ 20 декабря 2011

На самом деле для вас существует скрипт Subversion, который называется svn-merge-repos.pl

Я не уверен на 100%, что вы понимаете концепцию работы Subversion,Вы изучили книгу Subversion ?

В Subversion нет реальных метаданных tags/labels или branches, которые вы найдете во многих системах контроля версий.Вместо этого вы помещаете теги и ветви в свои собственные каталоги.Чтобы создать ветку или тег, вы копируете то, что хотите разветвлять или тегировать в каталог:

# Creating a branch for 2.0 development from trunk
$ cp http://server/svn/module/trunk http://server/svn/module/branches/2.0

# Tagging my 2.0 development as 2.0.1
$ cp http://server/svn/module/branches/2.0 http://server/svn/module/tags/2.0.1

Теоретически вы можете просто создать новый каталог branch или tag для каждого выпуска иветка, над которой вы работаете, без необходимости объединения репозиториев.Именно это я и сделал, когда сделал конвертацию StarTeam в Subversion.Проблема в том, что вы теряете связь между скажем ревизией 2.0.1 и 2.0.2, поскольку они не имеют общей истории.В 99% случаев это не проблема, и вы всегда можете вернуться к исходному архиву StarTeam, если вам что-то понадобится.Через несколько месяцев это никого не волнует.

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

Например, у вас есть ветвь 2.0 из trunk, тег 2.0.1, тег 2.0.2 и тег 2.0.3, вы можете сделать это:

  • Поместите выпуск ветки 2.0.1 в ствол.
  • Скопируйте ствол в branches/2.0.
  • Поместите следующую ветку в ствол и скопируйте ее в ее ветку (используйтеСкрипт svn-merge-repos.pl)
  • Наконец, поместите текущий транк.
  • Теперь перейдите в этот каталог branches/2.0 и скопируйте его в tags/2.0.1.Используя сценарий svn-merge-repos.pl, создайте выпуск 2.0.1 для branches/2.0 и скопируйте его в tags/2.0.2.Продолжайте, пока не дойдете до верхушки ветки 2.0.

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

1 голос
/ 21 декабря 2011

Вы должны использовать svn-load-dirs.pl :

"Этот сценарий Perl предназначен для загрузки нескольких каталогов в Subversion. Это полезно, если у вас естьнесколько .zip или tar. {Z, gz, bz2} для определенного пакета и хотите загрузить их в Subversion. "

В основном то, что вы делаете:

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

svn_load_dirs.pl создает одну ревизию для каждого тега, и вы также можете создать тег (subversion-) после каждого импорта.Он будет отслеживать все удаленные и добавленные файлы и будет выполнять соответствующие действия SVN.Это означает, что вы можете явно начать с пустого транка

1 голос
/ 20 декабря 2011

Вместо этого вы должны создать тег.
EDIT:
svn status list все изменения
Вы можете распечатать все удаленные файлы следующим образом:
Свн Статус | grep -E '^!' | awk '{print $ 2}'> / tmp / changes
Вы можете удалить SVN для каждого файла с пакетом;)

РЕДАКТИРОВАТЬ: (SVN Migration How-To)

Предположим, у вас есть проект с именем projectA и пустой SVN-репозиторий.
Во-первых, вы должны создать структуру папок следующим образом:

projectA/
|-- branches
|-- tags
|-- trunk


Затем импортируйте файлы вашего проекта.

projectA/
|-- branches
|-- tags
`-- trunk
    |-- README
    `-- src

После импорта вы можете создать тег, чтобы «пометить» первоначальный выпуск:

projectA/
|-- branches
|-- tags
|   `-- release-1
`-- trunk
    |-- README
    `-- src


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

Магистраль всегда должна содержать актуальную версию вашего кода.
Я настоятельно рекомендую вам использовать TortoiseSVN в Windows, если вы новичок;)

1 голос
/ 20 декабря 2011

Я, конечно, не эксперт по SVN, но я считаю, что вам нужно ввести команду svn delete для элементов, которые вы хотите удалить при следующем коммите.Здесь описано .

0 голосов
/ 20 декабря 2011

Судя по вашему вопросу, похоже, что вы завершили неправильное использование SVN. Нет смысла удалять всю папку trunk / src и заменять ее новой, за исключением случаев значительных изменений в коде.

Вместо этого создайте тег для выпуска.

...