Заблокированные папки в Subversion

131

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

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

PositiveGuy
источник
Вы получаете сообщение «Препятствие» при операции добавления?
Сандер Райкен,

Ответы:

113

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

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

gbjbaanb
источник
1
странно. В итоге мне пришлось проверить эту папку. Папка существовала раньше в репозитории. Затем я удалил его, не используя команду удаления svn. После проверки и фиксации проблема решена. Затем в другом файле .css, который я НЕ переименовал, не удалил и только редактировал, мне пришлось выполнить обновление svn, потому что у меня возникла какая-то странная проблема с этим (другое сообщение).
PositiveGuy
1
Боже мой, я пытался выполнить коммит на основе копии этого проекта, которая была у меня на внешнем диске, а не рабочей копии с моего локального диска. Duh.
PositiveGuy
8
Это часто случается, если вы перемещаете каталог из одного места в другое и не используете команду SVN move. Скрытый файл .svn перемещается вместе с ним, но не обновляется. Удаление файлов .svn решает проблему.
user85259
1
Это случилось со мной, когда я переместил всю папку, скопировав ее в другую папку с помощью Visual Studio 2008, а не с помощью проводника Windows.
MacGyver
2
Я решил экспортировать файлы из заблокированной папки, чтобы я не потерял их, затем я щелкнул папку над заблокированной папкой, щелкнул `` Вернуть '', затем снял выделение со всего, кроме заблокированной папки, и вернул это заблокированное папка, чтобы она была извлечена из содержимого файла .svn. Затем я снова добавил ранее заблокированную папку с экспортированными файлами и снова добавил их.
MacGyver
9

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

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

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

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

Нил Тродден
источник
Это исправило это для меня. Спасибо!
Патрик
11
Я думаю, что решение состоит в том, чтобы засунуть SVN в корзину и перейти на систему контроля версий, которая не является мусором. Извини ... Я просто расстроен.
Фил Хейл
5

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

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

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

Джереми Массел
источник
1

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

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

Колин Николс
источник
1

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

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

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

Я получил! отметьте каталог, который был переименован с 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.

Будет
источник
1

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

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

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

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

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

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

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

Обэйд
источник
1

Я также видел это в 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
    
Крис Р. Доннелли
источник
0

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

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

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

Джон Маклафлин
источник
0

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

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

антон
источник
0

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

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

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

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

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

Larcher
источник
0

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

bhlowe
источник
да, мне пришлось удалить свою папку, она была повреждена ... папка .svn.
PositiveGuy
0

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

Дрю Н
источник
0

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

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

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

Михай Костюг
источник
0

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

user8783065
источник