SVN: Как воссоздать каталог, который создан, но еще не зафиксирован - PullRequest
3 голосов
/ 23 февраля 2009

Вот небольшая SVN проблема:

Я создаю каталог локально:

$ svn mkdir output
A         output

Я случайно удалил его:

rm -rf output

Теперь, как мне его воссоздать? Я попробовал это:

$ svn mkdir output
svn: 'output' is already under version control

А это:

$ svn revert output
Reverted 'output'

Но его все еще нет.

ОБНОВЛЕНИЕ: Люди предполагают, что простого mkdir output должно быть достаточно после его удаления. Но в моей версии SVN это не так. Он игнорирует тот факт, что существует каталог output/.svn, который я также удалил. Просто mkdir output не вернет это, конечно. Так или иначе, SVN должен участвовать в воссоздании этого каталога output. (Я использую SVN 1.4.6.)

Ответы [ 4 ]

7 голосов
/ 23 февраля 2009

Удалите его официально в SVN:

$  svn rm --force output
svn: 'output' does not exist

Затем создайте его снова:

$ svn mkdir output 
A         output

То, что вывод svn remove выше, немного вводит в заблуждение. Я думал, что удаление не удалось, и это ничего не изменит.

Это не самый интуитивный подход SVN, но так он работает.

2 голосов
/ 23 февраля 2009

Просто mkdir output должно быть достаточно.

1 голос
/ 23 февраля 2009

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

Четыре команды, введенные в исходном сообщении, выполняют следующие действия:

  1. Скажите SVN, что вы хотите добавить каталог с именем 'output' в репозиторий SVN - он ответит, добавив эту информацию в свой 'changelist'
  2. Удалите «выходные данные» из вашей локальной файловой системы - SVN НЕ знает, что это происходит
  3. Скажите SVN, что вы хотите добавить каталог с именем 'output' в репозиторий SVN - он жалуется, потому что 'Вы уже сказали мне об этом!'
  4. Скажите SVN, что вы передумали по поводу добавления каталога 'output' - он обязуется, удалив эту информацию из своего 'changelist'

Если бы вы просто выпустили ...

mkdir output

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

НТН

1 голос
/ 23 февраля 2009

Вы также можете попробовать воссоздать каталог с помощью mkdir.

svn mkdir создает каталог, а также делает эквивалент svn add, но за один шаг.

Так что причина, по которой у вас проблемы, заключается в том, что "добавление" было сделано. Поскольку вы не сделали коммит, revert ничего не сделает, и svn mkdir не будет работать, поскольку в Subversion уже есть каталог для добавления при следующем коммите (поскольку ваш rm был вне Subversion).

...