NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
А-ч, пробелы. Это будет работать с пробелами:
find . -type f -print0| xargs -0 cvs add
cvs import
не только для сторонних источников. На самом деле каталоги не являются имеющими версию CVS, таким образом, они не предмет для ветвления политик. Пока Вы импортируете пустые каталоги, это прекрасно.
Обратите внимание, что можно только использовать cvs add
на файлах и папках, которые расположены в, уже проверил рабочую копию, иначе Вы доберетесь , "Не может открыть CVS/Entries для чтения" сообщение. Техника для создания нового "корневого модуля" с помощью cvs add
объяснена в этом объекте WinCVS FAQ: http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule
, Если Вы находитесь в Windows, и TortoiseCVS и WinCVS поддерживают рекурсивное дополнение (и дополнительная фиксация) нескольких файлов в единственной операции. В WinCvs ищут макрос, Добавляют> Рекурсивный, Добавляют (автоматически фиксируют)... У Черепахи используют команду Add Contents на каталоге. Оба позволят Вам выбирать, какие файлы добавить и что режимы расширения ключевого слова использовать для них (главным образом используемый для определения, какие файлы являются двоичными).
Для дальнейшей информации о рекурсивном добавляют во взгляде WinCvs здесь: http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive
<час> Кроме того cvs import
хорошо подходит для массовых дополнений. Однако путь cvs import
реализован в CVS ванили, имеет два недостатка (потому что это было первоначально записано для стороннего кода):
при использовании CVSNT можно избежать обоих недостатков путем определения -nC
опция на импорте. -n
для предотвращения ответвления "поставщика", и -C
для создания каталогов CVS.
Я думаю, что это - то, что я действительно поддержал в мои дни CVS:
find . -type f | xargs cvs add
Сначала добавьте, что все каталоги к CVS
find . -type d -print0| xargs -0 cvs add
Тогда добавляют все файлы в каталогах к CVS
find . -type f -print0| xargs -0 cvs add
решение Mark's решает вопрос пробелов, но производит эту проблему:
cvs добавляют: не может открыть CVS/Entries для чтения: Никакой такой файл или каталог
cvs [не добавляет прерванный]: никакой репозиторий
Для фиксации его фактическая команда для использования:
find . -type f -exec cvs add {} \;
SVN определенно делает эту тривиальную задачу, использование GUI как Черепаха еще легче, как бы то ни было.
Это могло бы быть хорошим местом для запуска: http://www-mrsrl.stanford.edu/~brian/cvstutorial/
Я использую этот простой скрипт оболочки, который должен быть запущен из уже проверенного CVS каталога. Он будет глупо пытаться добавить/комммитировать любые файлы и каталоги, которые найдет при рекурсивном поиске, так что в конце концов вы должны получить полное дерево коммитов.
Просто сохраните его как что-то вроде /usr/bin/cvsadd
и не забудьте использовать chmod +x /usr/bin/cvsadd
.
#!/bin/sh # @(#) add files and directories recursively to the current CVS directory # (c) 2009 by Dirk Jagdmann if [ -z "$1" ] ; then echo "usage: cvsadd 'import message'" exit 1 fi if [ -d "$2" ] ; then cvs add "$2" cd "$2" || exit 1 fi if [ ! -d CVS ] ; then echo "current directory needs to contain a CVS/ directory" exit 1 fi XARGS="xargs -0 -r -t -L 1" # first add all files in current directory find . -maxdepth 1 -type f -print0 | $XARGS cvs add find . -maxdepth 1 -type f -print0 | $XARGS cvs ci -m "$1" # then add all directories find . -maxdepth 1 -type d -not -name CVS -a -not -name . -print0 | $XARGS "$0" "$1"