Запрещенные папки в Subversion

Что, черт возьми, означает "загораживать", когда вы пытаетесь зарегистрироваться в Subversion? Я вижу две папки красного цвета с текстом "заблокирован". Я не понимаю, что это значит где-то в документах.

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

16 ответов

Решение

Это происходит, когда вы удалили или переместили подкаталоги.svn (не обращаясь к командам SVN), поэтому SVN имеет искаженное представление рабочей копии.

Сначала попробуйте выполнить очистку, и если это не решит проблему, верните (или обновите) каталог, чтобы восстановить папки подкаталога.svn.

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

Если вы используете tortoisesvn, вы получаете возможность "экспортировать не версионные файлы", но я думаю, что если вы делаете это из командной строки, он экспортирует только версионные файлы, так что у вас может быть немного трудоемкая задача - копировать не версионные файлы вручную,

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

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

Была та же проблема и исправлена ​​так:

  • переименован в прерванный каталог
  • создал каталог с его оригинальным именем в SVN (например, svn mkdir)
  • обновил родительскую папку, чтобы вновь созданный каталог появился в моей рабочей копии
  • скопировал файлы с заблокированного в недавно созданный каталог и передал их

Если вы работаете в системе *nix, убедитесь, что вы не создали файл, добавьте его в SVN, затем удалите его, заменив его папкой с тем же именем. Не помогает ОП, но, надеюсь, это избавит кого-то от стресса.

Это означает, что по какой-то причине возник конфликт во время операции. Проверьте, существует ли существующий неверсионный файл или папка с тем же именем, что и версионный.

(Перефразировано из файла справки клиента Tortoise SVN)

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

Действия по воспроизведению:

  1. Оформите репо

    svn checkout --force http://svn.server.hostname/path/to/repo/and/plugin_dir
    
  2. Проверьте, что ваш каталог в порядке

    cd plugin_dir
    svn st -u
    

    Выход должен быть

    Status against revision: 1234
    
  3. Создайте символическую ссылку (которая показывает проблему)

    cd ..
    mklink /d link_dir plugin_dir
    cd link_dir
    svn st -u
    

    Выход будет

    ~           1234  .
    Status against revision: 1234
    

У меня ничего не получилось, поэтому я сделал следующее:

  • экспортировано с неверсионными файлами в новом месте
  • переименовал существующую папку
  • переместил папку из места экспорта в проект
  • переименовал новую папку
  • добавить, зафиксировать
  • удалил старую, переименованную папку
  • переименовал новую папку
  • совершить

Существуют различные варианты сценария, которые могут вызвать эту ситуацию. Вот один пример:

Я закончил с! отметьте каталог, который был переименован из www в www_a без использования команды svn rename:

  1. Переименуйте текущий каталог с оригинальным именем, например, www_b
  2. Переименовать www_a обратно на www
  3. Убедитесь, что вы делаете 'svn update' или 'svn revert' внутри каталога www
  4. Удалите актуальный каталог www, не используя 'svn delete'
  5. Перейдите в родительский каталог и выполните команду svn update.
  6. Это восстановит исходный каталог www
  7. На этот раз используйте svn rename, чтобы переименовать www в www_a.
  8. Переименовать www_b обратно на www
  9. Используйте 'svn add', чтобы добавить его в хранилище

На этом этапе вы должны получить правильный рабочий каталог svn. И узнать кое-что о том, как устранить путаницу в каталоге svn.

Столкнулся с этой проблемой на машине с Windows.

Я проверил каталог, прежде чем я проверил весь проект, которому он принадлежал. Это вызвало для меня проблему с препятствиями.

Я просто удалил эту папку и запустил обновление от пользователя root (этой папки). Работало нормально.

Такие команды, как очистка и т. Д., Не работали для меня.

Несколько слов предостережения:

  1. Это дорого, если папка большая.
  2. Это приведет к потере всех ваших изменений, если они есть.

Всего наилучшего.

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

Я перепробовал все вышеизложенные предложения и другие найденные онлайн безрезультатно. Каждая опция выдает ошибку, что мой каталог был заблокирован и операция не может быть выполнена.

Я вошел в свою копию Time Machine, восстановил каталог и был в порядке. Я очистил рабочую копию в качестве меры предосторожности, правильно обновил свои файлы и вернулся к работе.

Это также может произойти, когда вы обновляете Subversion до версии, которая не поддерживается XCode.

Это произошло со мной, когда я заменил файл на папку с таким же именем. Решается удалением старого файла, фиксацией, а затем добавлением нового. Немного хакерский, но у меня сработало:)

Вот самый простой (и самый безопасный) способ, который я нашел, чтобы решить эту проблему:

  1. Временно переименуйте поврежденный файл или каталог (или родительский каталог), который заблокирован (например, добавьте ".backup").
  2. Удалить любой .svn каталоги внутри переименованного каталога (если применимо).
  3. svn revert переименованный (и теперь отсутствующий) объект из шага 1.
  4. svn delete перевернутый объект.
  5. Переименуйте резервную копию с шага 1 обратно на ее первоначальное имя.
  6. Добавьте и верните переименованный объект обратно в svn как новый объект.

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

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

Я удалил.svn в заблокированных каталогах и обновил его извне. Тогда внешняя команда svn распознает эти файлы.

Я получаю этот "заблокированный" статус для каталогов, когда я делаю обновления CMS (WordPress или Drupal) через веб-интерфейс - приложение не знает, что его код на самом деле является рабочей копией subversion, поэтому при обновлении плагина он удаляет этот плагин каталог (включая .svn каталог) и сбрасывает в новый каталог из новой версии плагина.

Чтобы получить это .svn dir back, из каталога, содержащего заблокированный dir. Я делаю заказ с --force, Например, если plugin_dir помечен "~", из его родительского каталога я запускаю:

svn checkout --force http://svn.server.hostname/path/to/repo/and/plugin_dir

Все файлы, которые уже есть, остаются одними и помечаются буквой "E" на выходе команды извлечения (помечается буквой "M" при запуске svn status).

Мне иногда приходится возвращаться и добавлять любые файлы, которые были новыми с обновлением; или удалите файлы, которые должны быть удалены как часть обновления, так как они снова появились, когда я сделал заказ. Я считаю, что они отмечены как "А" на кассе, но последующее svn status не буду упоминать их.

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

Другие вопросы по тегам