Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Некоторая дополнительная информация об этом может быть найдена в сообщении в блоге: Подверсия Стирает, недостающая возможность
убедиться прочитать комментарии также, где Karl Fogel рассматривает статью в истинном свете :-)
Для постоянного удаления файлов монстра из репозитория SVN нет никакого другого решения, чем использование svnadmin дампа/загрузки. ( Книга SVN: команда дампа)
, Чтобы препятствовать тому, чтобы огромные файлы фиксировались, сценарий рычага может использоваться. У Вас мог быть, например, сценарий, который выполнил "предварительную фиксацию" каждый раз, когда кто-то пытался согласиться на репозиторий. Сценарий мог бы проверить размер файла или тип файла, и отклонить фиксацию, если бы это содержало файл или файлы, которые были слишком большими, или "запрещенного" типа.
более типичное использование сценариев рычага должно проверить (предварительно фиксируют) это, фиксация содержит сообщение журнала или (постфиксацию) к электронной почте фиксации или обновить веб-сайт с недавно зафиксированными файлами.
сценарий рычага А является сценарием, который работает в ответ на ответ на события репозитория ( Книга SVN: Создайте рычаги ).
Если можно поймать его, как только это фиксируется, метод дампа/загрузки svnadmin не слишком болезненный. Предположим, что кто-то просто случайно фиксировал gormundous-raw-image.psd в Пересмотре 3849. Вы могли сделать это:
svnadmin dump /var/repos -r 1:3848 > ~/repos_dump
, Который создал бы файл дампа, содержащий все до и включая Пересмотр 3848. В той точке Вы могли использовать svnadmin, создают, и svnadmin загружаются для воссоздания репозитория без незаконной фиксации, при этом протест состоит в том, что любые изменения, которые Вы внесли в структуре каталогов репозитория - рычагах, символьных ссылках, изменениях разрешения, подлинных файлах, etc. - должны будут быть скопированы со старого каталога. Вот пример остальной части сессии удара, которую Вы могли бы использовать для завершения операции:
svnadmin create /var/repos-new
svnadmin load /var/repos-new < ~/repos_dump
cp -r /var/repos/conf /var/repos-new
cp -r /var/repos/hooks /var/repos-new
mv /var/repos{,-old} && mv /var/repos-new /var/repos
я уверен, что это будет более болезненно больше истории, которую имеет Ваш репозиторий, но это действительно работает.
После того как Вы удалили файл из своего ГЛАВНОГО пересмотра, он не замедляет Вас на рабочей скорости, поскольку ony дельты между изменениями обрабатываются. (Резервные копии репозитория должны, конечно, обработать загрузку).